「R에 의한 기계 학습」의 공부 이력(4)

8452 단어 RRStudio기계 학습

R에 의한 기계 학습



(소프트웨어 품질 기술자를 위한) 데이터 분석 연구회에서 서적 『R에 의한 기계 학습(Machine Learning with R)』을 사용하여 기계 학습을 배운다.
htps //w w. 아마존. 이. jp/dp/4798145114/

제6장 수치 데이터 예측 - 회귀법



용어


  • 종속 변수 = 목적 변수
  • 독립 변수 = 설명 변수
  • 회귀목 : 예측 결과는 평균값으로 낸다
  • 모델 트리 : 예측 결과는 회귀식으로 낸다

  • challenger.csv 분석



    데이터 설명


  • distress_ct : O 링의 이상 수
  • temperature : 온도 (화씨)
  • field_check_pressure : 현지점 기압
  • flight_num : 발사 ID

  • challenger.csv의 distress_ct(O링의 이상수)는, 순서 척도에 가까운 분포를 나타내고, 단회귀 분석의 목적 변수로서는, 좋지 않을지도.

    산점도


    > launch <- read_csv("challenger.csv")
    Parsed with column specification:
    cols(
      distress_ct = col_double(),
      temperature = col_double(),
      field_check_pressure = col_double(),
      flight_num = col_double()
    )
    > plot(launch)
    


    산점도를 보면 temperature와 distress_ct 사이에 어쩐지 상관이 있는 것처럼 보인다.

    상관 계수



    상관 계수를 구해 본다.
    > cor(launch$temperature, launch$distress_ct)
    [1] -0.5111264
    

    상관 계수의 사용법·주의점
    htps : // 당연히. 비 · 아 r ゔ ぇ s / 7966

    중회귀 분석



    직접 만든 회귀 함수 사용


    > reg <- function(y, x) {
    +     x <- as.matrix(x)
    +     x <- cbind(Intercept = 1, x)
    +     b <- solve(t(x) %*% x) %*% t(x) %*% y
    +     colnames(b) <- "estimate"
    +     print(b)
    +     }
    > reg(y = launch$distress_ct, x = launch[2])
                   estimate
    Intercept    3.69841270
    temperature -0.04753968
    > reg(y = launch$distress_ct, x = launch[2:4])
                             estimate
    Intercept             3.527093383
    temperature          -0.051385940
    field_check_pressure  0.001757009
    flight_num            0.014292843
    

    insurance.csv 분석



    산점도 행렬


    > install.packages("psych")
    > library(psych)
    > insurance<- read_csv("insurance.csv")
    Parsed with column specification:
    cols(
      age = col_double(),
      sex = col_character(),
      bmi = col_double(),
      children = col_double(),
      smoker = col_character(),
      region = col_character(),
      expenses = col_double()
    )
    > pairs.panels(insurance[c("age", "bmi", "children", "expenses")])
    


    빨간 점은 x, y 축의 평균을 나타냅니다.
    타원은 상관 타원으로 상관 강도를 시각화합니다.

    중회귀 분석



    lm() 함수 사용


    > ins_model <- lm(expenses ~ ., data = insurance)
    > summary(ins_model)
    
    Call:
    lm(formula = expenses ~ ., data = insurance)
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -11302.7  -2850.9   -979.6   1383.9  29981.7 
    
    Coefficients:
                        Estimate Std. Error t value Pr(>|t|)    
    (Intercept)         -11941.6      987.8 -12.089  < 2e-16 ***
    age                    256.8       11.9  21.586  < 2e-16 ***
    sex[T.male]           -131.3      332.9  -0.395 0.693255    
    bmi                    339.3       28.6  11.864  < 2e-16 ***
    children               475.7      137.8   3.452 0.000574 ***
    smoker[T.yes]        23847.5      413.1  57.723  < 2e-16 ***
    region[T.northwest]   -352.8      476.3  -0.741 0.458976    
    region[T.southeast]  -1035.6      478.7  -2.163 0.030685 *  
    region[T.southwest]   -959.3      477.9  -2.007 0.044921 *  
    ---
    Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
    Residual standard error: 6062 on 1329 degrees of freedom
    Multiple R-squared:  0.7509,    Adjusted R-squared:  0.7494 
    F-statistic: 500.9 on 8 and 1329 DF,  p-value: < 2.2e-16
    

    기여율은 Multiple R-squared: 0.7509
    p 값은 Pr(>|t|) 및 p-value: < 2.2e-16

    R 커맨더로 분석


    > challenger <- read_csv("challenger.csv")
    > library(Rcmdr)
    

    스크립트



    산점도 행렬을 표시하는 R 커맨더 스크립트와 선형 회귀 모델을 만드는 스크립트.
    Rcmdr>  scatterplotMatrix(~distress_ct+field_check_pressure+flight_num+temperature, regLine=FALSE, smooth=FALSE, diagonal=list(method="density"), data=launch)
    


    Rcmdr>  RegModel.1 <- lm(distress_ct~temperature, data=launch)
    Rcmdr>  summary(RegModel.1)
    
    Call:
    lm(formula = distress_ct ~ temperature, data = launch)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -0.5608 -0.3944 -0.0854  0.1056  1.8671 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)   
    (Intercept)  3.69841    1.21951   3.033  0.00633 **
    temperature -0.04754    0.01744  -2.725  0.01268 * 
    ---
    Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
    Residual standard error: 0.5774 on 21 degrees of freedom
    Multiple R-squared:  0.2613,    Adjusted R-squared:  0.2261 
    F-statistic: 7.426 on 1 and 21 DF,  p-value: 0.01268
    

    GUI


  • 데이터 세트를 선택합니다.

  • 메뉴 [그래프]-[산포도 행렬…]을 실행한다.
  • 모든 변수를 선택하고 실행한다.

  • 메뉴 [통계량]-[모델에 적합]-[선형 회귀…]를 실행한다.
  • 목적 변수로 distress_ct를 선택하고 설명 변수로 temperature를 선택하고 실행합니다.


  • 회귀 나무와 모델 나무



    whitewines.csv를 회귀 나무로 분석


    > install.packages("rpart")
    > library(rpart)
    > library(rpart.plot)
    > wine <- read.csv("whitewines.csv")
    > m.rpart <- rpart(quality ~., data = wine_train)
    > m.rpart
    n= 3750 
    
    node), split, n, deviance, yval
          * denotes terminal node
    
     1) root 3750 2945.53200 5.870933  
       2) alcohol< 10.85 2372 1418.86100 5.604975  
         4) volatile.acidity>=0.2275 1611  821.30730 5.432030  
           8) volatile.acidity>=0.3025 688  278.97670 5.255814 *
           9) volatile.acidity< 0.3025 923  505.04230 5.563380 *
         5) volatile.acidity< 0.2275 761  447.36400 5.971091 *
       3) alcohol>=10.85 1378 1070.08200 6.328737  
         6) free.sulfur.dioxide< 10.5 84   95.55952 5.369048 *
         7) free.sulfur.dioxide>=10.5 1294  892.13600 6.391036  
          14) alcohol< 11.76667 629  430.11130 6.173291  
            28) volatile.acidity>=0.465 11   10.72727 4.545455 *
            29) volatile.acidity< 0.465 618  389.71680 6.202265 *
          15) alcohol>=11.76667 665  403.99400 6.596992 *
    > rpart.plot(m.rpart, digits = 3)
    


    > rpart.plot(m.rpart, digits = 4, fallen.leaves = TRUE, type = 3, extra = 101)
    



    모델 성능 평가
    > p.rpart <- predict(m.rpart, wine_test)
    > summary(p.rpart)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      4.545   5.563   5.971   5.893   6.202   6.597 
    > summary(wine_test$quality)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      3.000   5.000   6.000   5.901   6.000   9.000 
    > cor(p.rpart, wine_test$quality)
    [1] 0.5369525
    

    연습시 문제



    *RWeka가 잘 되지 않는다. 책과 다른 결과가 된다.

    좋은 웹페이지 즐겨찾기