本文介紹如何利用R語言做一個完整的機器學習項目。一個小項目,端到端,遵循機器學習的實施的工作流,系統地完成項目。
1 搭建R機器學習環境
2 業務問題和數據理解
3 數據準備
4 數據建模
5 模型評價
6 模型應用
7 總結
1 搭建R機器學習環境搭建R機器學習環境是一件簡單而有趣的事情。
1.1 R軟體下載和安裝R語言是跨平臺,根據電腦作業系統和位數選擇下載和安裝合適的R軟體。
R軟體下載地址:R官網。
R做機器學習需要安裝R包。R中有很多R包可以完成機器學習裡面的某些任務,推薦閱讀《RForML核心包》系列文章。
本文使用caret包,安裝和加載代碼。
if(!require('caret'))
{
install.packages('caret')
require('caret')
}
caret包更詳細的資料見The caret Package。
2 業務問題和數據理解業務問題和數據理解,關鍵要解決好這些問題:
本文機器學習項目的目的是介紹R語言解決一個具有確定性類別的分類問題,分類是我們擅長的事情,如何把這種事情讓機器來做,從而實現自動化和智能化,這富有挑戰也飽含意義。
通過這樣的一個項目,給更多人如何基於R語言做機器學習項目提供一種整體思路和系統方案。
本文選擇的iris數據集,它是一個經典的公開的數據集。iris數據集詳細介紹見Iris flower data set
當知道了為什麼要做這個機器學習項目和這個機器學習是要做什麼後,當確定了做這個機器學習項目的數據集是什麼以及在哪裡後,這個時候,就到了數據準備階段了。
數據準備階段是需要花費大量時間和精力去做的事情。數據準備主要包括對數據的處理、探索和分解。
iris數據集是R語言自帶的數據集,可以拿來直接使用。順便說一下,R語言和R包都提供了豐富的數據集,剛開始學習,可以基於這些數據集來解決機器學習各種問題。
數據加載
代碼
data(iris)
iris.data <- iris
3.2 數據探索數據探索,即對數據做探索性分析,從數據源頭開始認識和深入理解數據,發現數據裡面所含的特性。
數位化描述1 數據集結構
使用str函數查看數據集結構,獲取到如下信息
iris數據集有150個樣本和5個變量,前4個變量的類型是數值類型,第5個變量的類型是因子類型。
因子類型的分布
iris數據集類別變量的分布是均勻分布,各佔1/3
獲取數據Top或者Bottom記錄,使用head函數或者tail函數。例如
或者
R語言使用summary函數獲取數據集摘要,對於數值型變量返回5個數位化特徵:最小值,第一分位數,中位數,均值,第三分位數和最大值,對於因子型變量,返回每個類別的頻數。
單變量可視化,即針對數據集中的單個變量畫圖,通過圖形觀察和理解變量的分布情況。
輸入變量可視化
input.val <- iris.data[,1:4]
par(mfrow=c(1,4))
for(i in 1:4) {
boxplot(input.val[,i], main=names(iris.data)[i])
}
輸出變量可視化
par(mfrow=c(1,1))
output.val <- iris.data[,5]
plot(output.val)
2 多變量可視化多變量可視化,即對數據集多變量之間關係進行可視化,主要是雙變量可視化。
library(caret)
library(ellipse)
featurePlot(x=input.val, y=output.val, plot = 'ellipse')
觀察每一種類別下各種變量的box圖
library(caret)
featurePlot(x=input.val, y=output.val, plot = 'box')
3.3 數據分解為了數據建模中的模型選擇,我們把數據集分解為訓練數據集和驗證數據集或者訓練數據集-驗證數據集-測試數據集。在這裡我們選擇了前者,按著8:2比例基於各個樣本類別的情況進行了分解。
參考代碼
# 獲取原數據集的80%的行索引號
validation.index <- createDataPartition(iris.data$Species, p=0.80, list=FALSE)
# 選擇20%的數據用來驗證模型
validation.data <- iris.data[-validation.index,]
# 選擇80%的數據用來訓練和測試模型
train.data <- iris.data[validation.index,]
4 數據建模4.1 交叉驗證為了選擇最佳或者最優模型,採用一種典型的處理方法,交叉驗證方法。常用10-折交叉驗證。
control <- trainControl(method="cv", number=10)
metric <- "Accuracy"
4.2 構建模型caret包實現了許多機器學習分類算法,在這裡選擇LDA、CART和RF算法。
# a) 線性算法
library(e1071)
set.seed(7)
lda.model <- train(Species~., data=train.data, method="lda", metric=metric, trControl=control)
# b) 非線性算法
library(rpart)
set.seed(7)
cart.model <- train(Species~., data=train.data, method="rpart", metric=metric, trControl=control)
# c) advanced algorithms
# Random Forest
library(randomForest)
set.seed(7)
rf.model <- train(Species~., data=train.data, method="rf", metric=metric, trControl=control)
5 模型評價分類模型的常用評價指標採用分類準確率。
根據LDA/CART/RF模型的分類準確率選擇最佳模型
代碼
results.model <- resamples(list(lda=lda.model, cart=cart.model, rf=rf.model))
summary(results.model)
結果
或者利用可視化,更加直觀地做模型擇優
代碼
dotplot(results.model)
結果
針對iris數據集,LDA算法最佳。
利用LDA算法對驗證的數據集進行測試和分類,計算分類的精度和通過混淆矩陣評價分類的效果。
代碼:
pred.result <- predict(lda.model, validation.data)
confusionMatrix(pred.result, validation.data$Species)
部分結果:
關於confusionMatrix函數詳細文檔,參加help(confusionMatrix)。
一個完整的機器學習項目,包括業務問題、數據理解、數據準備、數據建模、模型評價和模型應用,這些環節相輔相成,構成一個系統。因此,在做機器學習項目的時候,每個環節裡面要做什麼,為什麼要做,都要清清楚楚,然後就是怎麼有效地做。不斷迭代,持續優化的網際網路文化和精神,在做機器學習項目中,依然煥發生機。
您在閱讀中,有什麼建議或者想法,請留言。
想加入數據人圈子,請加微信luqin360。
數據人網http://shujuren.org是數據人學習、交流和分享的平臺。數據人網提供和傳播優質的省時的稀缺的數據知識。
誠邀各位數據人參與,共建共享數據知識庫。
點擊【閱讀原文】,進入【數據人網】