R語言機器學習理論和實戰 第二章 Logistic迴歸模型

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

數據篩選

關於數據的篩選方法以及每個屬性的含義之前的文章《Python機器學習理論與實戰 第二章 Logistic迴歸模型(上)》已經介紹過,在此就不再贅述。

缺失值識別

統計每個屬性缺失值的個數:

sapply(titanic_,function(data){sum(is.na(data))})

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

數據篩選

關於數據的篩選方法以及每個屬性的含義之前的文章《Python機器學習理論與實戰 第二章 Logistic迴歸模型(上)》已經介紹過,在此就不再贅述。

缺失值識別

統計每個屬性缺失值的個數:

sapply(titanic_,function(data){sum(is.na(data))})

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

屬性的缺失值統計

可以看到 age 的缺失值個數較多,fare有1個缺失值。

缺失值填充

採用比較簡單的填充方式,補充 Age 和 fare 裡的數據,使用平均數或者中位數填充都是對模型偏離造成最小影響的策略

titanic_[is.na(titanic_$age),"age"]=mean(titanic_$age,na.rm = TRUE)titanic_[is.na(titanic_$fare),"fare"]=mean(titanic_$fare,na.rm = TRUE)sapply(titanic_,function(data){sum(is.na(data))})

數據劃分

數據分割,隨機採樣25%的數據用於測試,剩下的75%用於構建訓練模型。

# 查看數據類型信息str(titanic_)
# 首先對數值型數據標準化 ,Z-Score標準化titanic_[,-c(1,3,8)]= scale(titanic_[,-c(1,3,8)] )head(titanic_)#分割數據集set.seed(3)trainindex = sample(1:nrow(x = titanic_),0.75*nrow(titanic_))trainset = titanic_[trainindex,]testset = titanic_[-trainindex,]

特徵工程

  • 特徵轉換

對於類別型的變量,需要使用one-hot 編碼轉化為數值特徵,用0/1代替,轉換特徵後,凡是類別型的特徵都單獨剝離出來,獨成一列特徵,這一步由R語言自動完成,後續會看到。

  • 數據標準化

數據標準化在前面已經做了,正常的做法應該是根據測試集的均值和標準差來對測試集和訓練集進行標準化操作,但是作者為了方便,直接根據所有數據的均值和標準差來做了標準化。

模型擬合

fit.full = glm(survived~.,data = trainset,family = binomial)# 查看模型的概括性信息summary(fit.full)

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

數據篩選

關於數據的篩選方法以及每個屬性的含義之前的文章《Python機器學習理論與實戰 第二章 Logistic迴歸模型(上)》已經介紹過,在此就不再贅述。

缺失值識別

統計每個屬性缺失值的個數:

sapply(titanic_,function(data){sum(is.na(data))})

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

屬性的缺失值統計

可以看到 age 的缺失值個數較多,fare有1個缺失值。

缺失值填充

採用比較簡單的填充方式,補充 Age 和 fare 裡的數據,使用平均數或者中位數填充都是對模型偏離造成最小影響的策略

titanic_[is.na(titanic_$age),"age"]=mean(titanic_$age,na.rm = TRUE)titanic_[is.na(titanic_$fare),"fare"]=mean(titanic_$fare,na.rm = TRUE)sapply(titanic_,function(data){sum(is.na(data))})

數據劃分

數據分割,隨機採樣25%的數據用於測試,剩下的75%用於構建訓練模型。

# 查看數據類型信息str(titanic_)
# 首先對數值型數據標準化 ,Z-Score標準化titanic_[,-c(1,3,8)]= scale(titanic_[,-c(1,3,8)] )head(titanic_)#分割數據集set.seed(3)trainindex = sample(1:nrow(x = titanic_),0.75*nrow(titanic_))trainset = titanic_[trainindex,]testset = titanic_[-trainindex,]

特徵工程

  • 特徵轉換

對於類別型的變量,需要使用one-hot 編碼轉化為數值特徵,用0/1代替,轉換特徵後,凡是類別型的特徵都單獨剝離出來,獨成一列特徵,這一步由R語言自動完成,後續會看到。

  • 數據標準化

數據標準化在前面已經做了,正常的做法應該是根據測試集的均值和標準差來對測試集和訓練集進行標準化操作,但是作者為了方便,直接根據所有數據的均值和標準差來做了標準化。

模型擬合

fit.full = glm(survived~.,data = trainset,family = binomial)# 查看模型的概括性信息summary(fit.full)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

模型的概括性信息

模型預測

# 返回概率testset$lr_y_predict_proba = predict(fit.full,newdata = testset[,-1],type = "response")# 返回類別testset$lr_y_predict = ifelse(testset$lr_y_predict_proba > 0.5,1,0)head(testset)

模型評價

模型評價指標和之前的一樣,使用準確性Accuracy /召回率 Recal l/精確率 Precision / F1 Measure,以及 ROC 曲線AUC 值,具體的含義和計算公式可以查看《Python機器學習理論與實戰 第二章 Logistic迴歸模型(下)》。

為了方便作者特地寫了一個可以同時計算這幾個指標的函數,需要的讀者可以做個參考,以後只需調用這個函數即可計算出所有的結果。

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

數據篩選

關於數據的篩選方法以及每個屬性的含義之前的文章《Python機器學習理論與實戰 第二章 Logistic迴歸模型(上)》已經介紹過,在此就不再贅述。

缺失值識別

統計每個屬性缺失值的個數:

sapply(titanic_,function(data){sum(is.na(data))})

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

屬性的缺失值統計

可以看到 age 的缺失值個數較多,fare有1個缺失值。

缺失值填充

採用比較簡單的填充方式,補充 Age 和 fare 裡的數據,使用平均數或者中位數填充都是對模型偏離造成最小影響的策略

titanic_[is.na(titanic_$age),"age"]=mean(titanic_$age,na.rm = TRUE)titanic_[is.na(titanic_$fare),"fare"]=mean(titanic_$fare,na.rm = TRUE)sapply(titanic_,function(data){sum(is.na(data))})

數據劃分

數據分割,隨機採樣25%的數據用於測試,剩下的75%用於構建訓練模型。

# 查看數據類型信息str(titanic_)
# 首先對數值型數據標準化 ,Z-Score標準化titanic_[,-c(1,3,8)]= scale(titanic_[,-c(1,3,8)] )head(titanic_)#分割數據集set.seed(3)trainindex = sample(1:nrow(x = titanic_),0.75*nrow(titanic_))trainset = titanic_[trainindex,]testset = titanic_[-trainindex,]

特徵工程

  • 特徵轉換

對於類別型的變量,需要使用one-hot 編碼轉化為數值特徵,用0/1代替,轉換特徵後,凡是類別型的特徵都單獨剝離出來,獨成一列特徵,這一步由R語言自動完成,後續會看到。

  • 數據標準化

數據標準化在前面已經做了,正常的做法應該是根據測試集的均值和標準差來對測試集和訓練集進行標準化操作,但是作者為了方便,直接根據所有數據的均值和標準差來做了標準化。

模型擬合

fit.full = glm(survived~.,data = trainset,family = binomial)# 查看模型的概括性信息summary(fit.full)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

模型的概括性信息

模型預測

# 返回概率testset$lr_y_predict_proba = predict(fit.full,newdata = testset[,-1],type = "response")# 返回類別testset$lr_y_predict = ifelse(testset$lr_y_predict_proba > 0.5,1,0)head(testset)

模型評價

模型評價指標和之前的一樣,使用準確性Accuracy /召回率 Recal l/精確率 Precision / F1 Measure,以及 ROC 曲線AUC 值,具體的含義和計算公式可以查看《Python機器學習理論與實戰 第二章 Logistic迴歸模型(下)》。

為了方便作者特地寫了一個可以同時計算這幾個指標的函數,需要的讀者可以做個參考,以後只需調用這個函數即可計算出所有的結果。

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

模型性能評價函數

# 因為要畫ROC曲線,所以需要載入ROCR包,沒有的需要先安裝一下#install.packages("ROCR")library(ROCR)report_fun(testset$lr_y_predict_proba,testset$lr_y_predict,testset$survived)
[1] "Accuracy 0.792682926829268"[1] "Precision 0.776859504132231"[1] "Recall 0.696296296296296"[1] "F_measure 0.734375"predictactual 0 10 166 271 41 94[1] "AUC 0.846171560161197"

這一章和《TensorFlow 機器學習理論與實戰 第二章 Logistic迴歸模型》以及《Python 機器學習理論與實戰 第二章 Logistic迴歸模型》使用的是同樣的數據集,只不過分別用 R 語言TensorFlowScikit-Learn 實現,前兩章內容已經發布,感興趣的讀者可以到作者主頁查看。接下來進入正題,利用R語言進行“泰坦尼克號生還預測”

獲取數據集

# 從網站獲取數據titanic = read.csv("https://gitee.com/boyan615/DataSet/raw/master/titanic.txt")# 取出對生還有影響的主要屬性titanic_=titanic[,c('survived','pclass','sex','age','sibsp','parch','fare','embarked')]head(titanic_)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

數據篩選

關於數據的篩選方法以及每個屬性的含義之前的文章《Python機器學習理論與實戰 第二章 Logistic迴歸模型(上)》已經介紹過,在此就不再贅述。

缺失值識別

統計每個屬性缺失值的個數:

sapply(titanic_,function(data){sum(is.na(data))})

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

屬性的缺失值統計

可以看到 age 的缺失值個數較多,fare有1個缺失值。

缺失值填充

採用比較簡單的填充方式,補充 Age 和 fare 裡的數據,使用平均數或者中位數填充都是對模型偏離造成最小影響的策略

titanic_[is.na(titanic_$age),"age"]=mean(titanic_$age,na.rm = TRUE)titanic_[is.na(titanic_$fare),"fare"]=mean(titanic_$fare,na.rm = TRUE)sapply(titanic_,function(data){sum(is.na(data))})

數據劃分

數據分割,隨機採樣25%的數據用於測試,剩下的75%用於構建訓練模型。

# 查看數據類型信息str(titanic_)
# 首先對數值型數據標準化 ,Z-Score標準化titanic_[,-c(1,3,8)]= scale(titanic_[,-c(1,3,8)] )head(titanic_)#分割數據集set.seed(3)trainindex = sample(1:nrow(x = titanic_),0.75*nrow(titanic_))trainset = titanic_[trainindex,]testset = titanic_[-trainindex,]

特徵工程

  • 特徵轉換

對於類別型的變量,需要使用one-hot 編碼轉化為數值特徵,用0/1代替,轉換特徵後,凡是類別型的特徵都單獨剝離出來,獨成一列特徵,這一步由R語言自動完成,後續會看到。

  • 數據標準化

數據標準化在前面已經做了,正常的做法應該是根據測試集的均值和標準差來對測試集和訓練集進行標準化操作,但是作者為了方便,直接根據所有數據的均值和標準差來做了標準化。

模型擬合

fit.full = glm(survived~.,data = trainset,family = binomial)# 查看模型的概括性信息summary(fit.full)

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

模型的概括性信息

模型預測

# 返回概率testset$lr_y_predict_proba = predict(fit.full,newdata = testset[,-1],type = "response")# 返回類別testset$lr_y_predict = ifelse(testset$lr_y_predict_proba > 0.5,1,0)head(testset)

模型評價

模型評價指標和之前的一樣,使用準確性Accuracy /召回率 Recal l/精確率 Precision / F1 Measure,以及 ROC 曲線AUC 值,具體的含義和計算公式可以查看《Python機器學習理論與實戰 第二章 Logistic迴歸模型(下)》。

為了方便作者特地寫了一個可以同時計算這幾個指標的函數,需要的讀者可以做個參考,以後只需調用這個函數即可計算出所有的結果。

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

模型性能評價函數

# 因為要畫ROC曲線,所以需要載入ROCR包,沒有的需要先安裝一下#install.packages("ROCR")library(ROCR)report_fun(testset$lr_y_predict_proba,testset$lr_y_predict,testset$survived)
[1] "Accuracy 0.792682926829268"[1] "Precision 0.776859504132231"[1] "Recall 0.696296296296296"[1] "F_measure 0.734375"predictactual 0 10 166 271 41 94[1] "AUC 0.846171560161197"

R語言機器學習理論和實戰 第二章 Logistic迴歸模型

ROC曲線

大家可以和之前 Python 的結果做一個比較,其實差不多,只不過在劃分測試集和訓練集的時候隨機種子不一樣所以結果才會有一定差別。

相關推薦

推薦中...