머신러닝 R을 통한 선형 회귀

3526 단어 기계 학습
선형 회귀: 목표 변수가 변수를 설명하는 도표를 쓴 다음에 먼저 한다.
R에서lm 명령을 사용하여 선형 회귀 분석을 할 수 있습니다.
lm(モデル関数、学習用データ)
목적: Tyrosine에 따라 카펫의 나이를 예측한다.

1. 데이터 세트 읽기

#データセットの読み込み
> carpet.data<-read.csv("http://www.stat.ufl.edu/~winner/data/carpet_age.csv", header=TRUE)

# 最後の2行は年齢が入ってないため削除
> carpet.data<-carpet.data[1:(nrow(carpet.data)-2),]
sample_id:絨毯ID
age:絨毯年齢
cys_acid: Cysteic Acidのレベル ※システイン酸
met:Methoionineのレベル ※メチニオン
tyr: Tyrosineのレベル     ※チロシン

2. 분류기(머신러닝 모드) 만들기

y  = a + bx
age  = a + b*tyr
# carpet.model.lm1にモデルオブジェクトが保存される
> carpet.model.lm1 <- lm(age ~ tyr, carpet.data)

3. 예측치 얻기


모델 대상(carpet.model.lm1)과 데이터(carpet.data)를 바탕으로 예측치를 계산하여 결과를 계산한다.predicted.Im1 열에 저장합니다.
predit 함수를 통해 예측치를 얻다.
> carpet.data$age.predicted.lm1 <- predict(carpet.model.lm1,carpet.data)

#予測値を確認
> head(carpet.data$age.predicted.lm1)
[1] 1772.335 1772.335 1682.160 1652.101 1652.101 1591.985

4. 결과 시각화

  • plot 함수를 사용하여age와tyr의 관계를 가시화한다.
  • > plot(x=carpet.data$tyr, y=carpet.data$age)
    
  • 의 도표에서 선형기 회귀분석을 통해 얻은 예측치를 붉은 점으로 가시화
  • > points(x=carpet.data$tyr, y=carpet.data$age.predicted.lm1,col="red")
    
  • 모델 선 추가
  • > abline(a=carpet.model.lm1$coefficients[1],b=carpet.model.lm1$coefficients[2],col="blue")
    
    #以下でも同じ結果が得られる
    > abline(carpet.model.lm1,col="blue")
    

    예측치는age=a+b×tyr에 기재되어 있다.
  • 측정치 vs 예측치 도표
    모델 예측이 순조롭다면 빨간색 선(기울기 1, 슬라이스 0에 가까운 선)에 그립니다.
  • > plot(x=carpet.data$age,y=carpet.data$age.predicted.lm1)
    > abline(a=0,b=1,col="red")
    

    5. 추정 정밀도의 검증


    확정 계수는 종종 정량으로 모델에서 정밀도를 예측하는 지표로 사용된다.
    다음 함수를 통해 확정 계수를 계산할 수 있다. 목표 변수의 측정 값과 예측 값은 매개 변수이다.
    ※ 계수를 모형의 정밀도로 결정
    다음 함수를 통해 확정 계수를 계산할 수 있다. 목표 변수의 측정 값과 예측 값은 매개 변수이다.
    > coef.det <- function(measured, predicted){
     1-sum((measured-predicted)^2) / sum((measured-mean(measured))^2)
     }
    
    #モデルの決定係数を上記関数を使って求める
    > coef.det(carpet.data$age,carpet.data$age.predicted.lm1)
    [1] 0.9805863
    
    확정 계수가 1에 가까울수록 모델의 정밀도가 좋다는 뜻이다.
    온라인 회귀 모델의 경우 다음과 같은 결정 계수를 얻을 수 있다
    > summary(carpet.model.lm1)$r.squared
    [1] 0.9805863
    
    변한 거 없어요.

    6. 다른 모델 함수 사용하기


    아래의 모델 함수로 시험해 보세요.
    y = a +bx + cx^2
    
    # モデルオブジェクトを作成
    > carpet.model.lm2 <- lm(age ~ poly(tyr,2), carpet.data)
    
    # 予測値を求める
    > carpet.data$age.predicted.lm2 <- predict(carpet.model.lm2,carpet.data)
    
    # 決定係数を求める
    > summary(carpet.model.lm2)$r.squared
    [1] 0.98508
    

    좋은 웹페이지 즐겨찾기