R做機器學習簡易教程

2021-02-08 R語言

本文介紹如何利用R語言做一個完整的機器學習項目。一個小項目,端到端,遵循機器學習的實施的工作流,系統地完成項目。

1 搭建R機器學習環境

2 業務問題和數據理解

3 數據準備

4 數據建模

5 模型評價

6 模型應用

7 總結

1 搭建R機器學習環境

搭建R機器學習環境是一件簡單而有趣的事情。

1.1 R軟體下載和安裝

R語言是跨平臺,根據電腦作業系統和位數選擇下載和安裝合適的R軟體。
R軟體下載地址:R官網。

1.2 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

3 數據準備

當知道了為什麼要做這個機器學習項目和這個機器學習是要做什麼後,當確定了做這個機器學習項目的數據集是什麼以及在哪裡後,這個時候,就到了數據準備階段了。
數據準備階段是需要花費大量時間和精力去做的事情。數據準備主要包括對數據的處理、探索和分解。

3.1 數據處理

iris數據集是R語言自帶的數據集,可以拿來直接使用。順便說一下,R語言和R包都提供了豐富的數據集,剛開始學習,可以基於這些數據集來解決機器學習各種問題。
數據加載
代碼

data(iris)

iris.data <- iris

3.2 數據探索

數據探索,即對數據做探索性分析,從數據源頭開始認識和深入理解數據,發現數據裡面所含的特性。

數位化描述1 數據集結構


使用str函數查看數據集結構,獲取到如下信息
iris數據集有150個樣本和5個變量,前4個變量的類型是數值類型,第5個變量的類型是因子類型。
因子類型的分布

iris數據集類別變量的分布是均勻分布,各佔1/3

2 數據集預覽

獲取數據Top或者Bottom記錄,使用head函數或者tail函數。例如

或者

3 數據集摘要


R語言使用summary函數獲取數據集摘要,對於數值型變量返回5個數位化特徵:最小值,第一分位數,中位數,均值,第三分位數和最大值,對於因子型變量,返回每個類別的頻數。

可視化描述1 單變量可視化

單變量可視化,即針對數據集中的單個變量畫圖,通過圖形觀察和理解變量的分布情況。
輸入變量可視化

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算法最佳。

6 模型應用

利用LDA算法對驗證的數據集進行測試和分類,計算分類的精度和通過混淆矩陣評價分類的效果。
代碼:

pred.result <- predict(lda.model, validation.data)

confusionMatrix(pred.result, validation.data$Species)

部分結果:

關於confusionMatrix函數詳細文檔,參加help(confusionMatrix)。

7 總結

一個完整的機器學習項目,包括業務問題、數據理解、數據準備、數據建模、模型評價和模型應用,這些環節相輔相成,構成一個系統。因此,在做機器學習項目的時候,每個環節裡面要做什麼,為什麼要做,都要清清楚楚,然後就是怎麼有效地做。不斷迭代,持續優化的網際網路文化和精神,在做機器學習項目中,依然煥發生機。

您在閱讀中,有什麼建議或者想法,請留言。
想加入數據人圈子,請加微信luqin360。

數據人網http://shujuren.org是數據人學習、交流和分享的平臺。數據人網提供和傳播優質的省時的稀缺的數據知識。

誠邀各位數據人參與,共建共享數據知識庫。

點擊【閱讀原文】,進入【數據人網】

相關焦點

  • 【R教程】R做你的第一個機器學習項目教程(一)
    你是否想要用R做機器學習,但又苦惱於怎麼開始做?在這篇文章裡你將會用R完成你的第一個機器學習項目。
  • 教程|R語言學習與實踐教程
    使用Tidyverse操作數據主題:在本教程中,您將學習如何使用Tidyverse軟體包集合來與您的數據進行交互。在本教程中,我將向您介紹一些最常用的功能。使用ggplot2可視化數據主題:在R中創建圖形。內容包括:Ggplot2非常強大,但它可能需要一點時間習慣。 本教程將幫助您學習ggplot2。 我們將使用三種最常用的繪圖技術,使用真實數據製造出可出版的圖形。5天數據挑戰主題:數據科學入門語言:Python和R.
  • 簡易床墊手工製作教程
    簡易床墊手工製作教程花了很多錢買的床墊,又重又不舒服,還可能與自己的床大小不一,非常苦惱,洗起來更是困難。現在不用擔心啦,今天教你自己製作簡易床墊,舒服實用,更可以隨意搭配自己喜歡的顏色,洗起來很便利,而且也可以帶到戶外!1.首先,買幾個枕頭套。
  • Tidy時代R語言學習的一些ABC
    畢竟,做選擇是小孩子愛做的事,成年人需要多快好省地幹活。最初的想法,是把這個公眾號作為一個「筆記本」,記錄一下自己工作中用到的新工具、解決的小問題或者論文筆記什麼的。當然,寫著寫著,不自覺地還是變成了寫教程。畢竟,多年教師的經歷,「寫教案」已經成為自己整理知識的一種習慣。那麼,以後主要就來寫教程吧。
  • 簡易微積分教程(二)
    一個物理老師為什麼要寫微積分教程?能問出這個問題的人本身就是外行!只需要簡單的查閱一下牛頓老爵爺的生平就能知道,沒有微積分的理論支撐,物理簡直寸步難行。在此安利一本書,去年夏天看過後令我受益匪淺。書名為《機械宇宙——艾薩克·牛頓、皇家學會與現代世界的誕生》,詳細的介紹了現代人的精神世界是如何從蒙昧的中世紀走出來的。
  • R語言做深度學習
    如何用R語言做深度學習?我帶著這個問題,開始了我的學習與實踐。閱讀本文,你可以獲得:R語言做深度學習工作環境創建R語言快速實現神經網絡模型R語言做深度學習的資料深度學習的應用場景感謝RStudio公司開發的keras包,使得R語言可以利用keras深度學習框架來做深度學習,具有簡潔,易學,好用等特性。什麼是Keras?
  • 一文打盡人工智慧和機器學習網絡資源
    的確,如今學習人工智慧最大的困難不是找不到資料,更多同學的痛苦是:網上資源太多了,以至於沒法知道從哪兒開始搜索,也沒法知道搜到什麼程度。為了節省大家的時間,我們搜遍網絡把最好的免費資源匯總整理到這篇文章當中。這些連結夠你學上很久,而且你看完本文一定會再次驚嘆:現在網上關於機器學習、深度學習和人工智慧的信息真的非常多。
  • R平臺相關係數教程
    本教程介紹相關係數的知識,包括三方面的內容:首先,R平臺相關係數計算其次,R平臺相關矩陣可視化最後,R平臺相關係數的類型和如何影響後續分析工作
  • Python手寫機器學習最簡單的KNN算法
    摘要:從零開始學習機器學習最簡單的 KNN 算法。今天開始,我打算寫寫機器學習教程。
  • 一文打盡人工智慧和機器學習網絡資源,反正我已經收藏了!
    的確,如今學習人工智慧最大的困難不是找不到資料,更多同學的痛苦是:網上資源太多了,以至於沒法知道從哪兒開始搜索,也沒法知道搜到什麼程度。為了節省大家的時間,我們搜遍網絡把最好的免費資源匯總整理到這篇文章當中。這些連結夠你學上很久,而且你看完本文一定會再次驚嘆:現在網上關於機器學習、深度學習和人工智慧的信息真的非常多。
  • ggplot2簡易教程
    ggplot()函數可以實現對圖像做更大程度地控制和定製。ggplot2畫圖的思想採用了圖層疊加的思想,利用ggplot()對數據集創建圖層,並且通過映射函數aes()把數據集中要繪製的變量映射到到圖層中坐標軸,然後通過圖層疊加設計和實現不同的可定製化的圖形。
  • 我的世界怎麼建房子 簡易房子製作教程
    今天小編就為大家分享我的世界簡易房子製作教程,我的世界是一個自由度極高的遊戲,玩家可以根據自己的想像搭建自己的城堡以及各種各樣的房子。想要快速建造一棟房子的玩家不妨看一看哦!    首先用棕色的木頭搭成我這個樣子。如果要做大一點的話就做大點。
  • 資源 | 你需要的Scikit-learn中文文檔:步入機器學習的完美實踐教程
    Scikit-learn 中文文檔已經由 ApacheCN 完成校對,這對於國內機器學習用戶有非常大的幫助。
  • 可愛熊貓黏土簡易製作教程
    今天分享一下可愛熊貓的簡易教程,適合和孩子一起動手哦,很簡單的,提升動手能力外還能提高手作能力()第一步:準備工具1.黑色,白色和綠色黏土一份先捏一個這樣半彎形的臉2.搓兩個小圓球做眼睛3.兩個小圓球壓扁貼到面部,順便加個嘴巴4.
  • 【ID排版教程】還在用PS?簡易inDesign教程
    還在用PS做雜誌?簡易Adobe inDesign教程,立馬上手的專業排版軟體。
  • Python 手寫機器學習最簡單的 kNN 算法
    本文 3000 字,預計閱讀時間 10 分鐘,建議收藏摘要:從零開始學習機器學習最簡單的 kNN 算法。今天開始,我打算寫寫機器學習教程。說實話,相比爬蟲,掌握機器學習更實用競爭力也更強些。目前網上大多這類教程對新手都不友好,要麼直接調用 Sklearn 包,要麼滿篇抽象枯燥的算法公式文字,看這些教程你很難入門,而真正適合入門的手寫 Python 代碼教程寥寥無幾。最近看了慕課網 bobo 老師的機器學習課程後,大呼過癮,最好的機器學習教程沒有之一。我打算以他的教程為基礎並結合自己的理解,從零開始更新機器學習系列推文。
  • 《機器學習及R應用》詳細目錄
    機器學習及R應用五天現場班陳強老師(親授)2021/1/20 - 1/24,北京
  • 常見機器學習用例TOP 7,在你身邊無處不在!
    這不是某個科幻場景(也不是機器終於有了「人心」)——這是正在發生的事實。隨著計算能力的進步,機器學習應用不斷發展,而我們也正在經歷一場真正的全球變革。那麼,今天我們就來看看,在日常生活中有哪些最常見的機器學習用例(有時我們甚至沒有意識到這些例子涉及機器學習)。 本文涵蓋了以下常見的機器學習用例:
  • 資源 | 15個高質量免費機器學習課程都在這兒了
    這些課程內容包括決策樹,樸素貝葉斯,邏輯回歸,神經網絡和深度學習,估計,貝葉斯學習,支持向量機和核方法,聚類,無監督學習,提升算法,強化學習和學習理論。神經網絡與機器學習導論(csc321),2014年該課程包括視頻講座連結:http://www.cs.toronto.edu/~tijmen/csc321/CMU——機器學習
  • 簡易創意手工相框摺紙教程
    簡易創意手工相框摺紙教程一年一度的寒假假期馬上就要來了,相信在座的各位寶寶們已經迫不及待的已經收拾好東西,準備回家過年了,哈哈,哎!8.最後,簡易摺紙相框就製作完成了。如果大家不想花錢買相框的,這款紙藝相框是紙藝君大力推薦的,閒暇之餘和孩子們一起來製作的,一定會很開心的,家裡的廢紙將過處理,就可以製作成簡易精美的相框,你還在等什麼,行動起來吧。