
教你如何用R進(jìn)行數(shù)據(jù)挖掘
R是一種廣泛用于數(shù)據(jù)分析和統(tǒng)計(jì)計(jì)算的強(qiáng)大語(yǔ)言,于上世紀(jì)90年代開始發(fā)展起來。得益于全世界眾多 愛好者的無盡努力,大家繼而開發(fā)出了一種基于R但優(yōu)于R基本文本編輯器的R Studio(用戶的界面體驗(yàn)更好)。也正是由于全世界越來越多的數(shù)據(jù)科學(xué)社區(qū)和用戶對(duì)R包的慷慨貢獻(xiàn),讓R語(yǔ)言在全球范圍內(nèi)越來越流行。其中一些R包,例如MASS,SparkR, ggplot2,使數(shù)據(jù)操作,可視化和計(jì)算功能越來越強(qiáng)大。
我們所說的機(jī)器學(xué)習(xí)和R有什么關(guān)系呢?我對(duì)R的第一印象是,它只是一個(gè)統(tǒng)計(jì)計(jì)算的一個(gè)軟件。但是后來我發(fā)現(xiàn)R有足夠的能力以一個(gè)快速和簡(jiǎn)單的方式來實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法。這是用R來學(xué)習(xí)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的完整教程,讀完本文,你將有使用機(jī)器學(xué)習(xí)的方法來構(gòu)建預(yù)測(cè)模型的基本能力。
注:這篇文章對(duì)于之前沒有很多數(shù)據(jù)科學(xué)知識(shí)的同學(xué)們是特別值得一看的,同時(shí)掌握一定的代數(shù)和統(tǒng)計(jì)知識(shí)將會(huì)更有益于您的學(xué)習(xí)。
一、初識(shí)R語(yǔ)言
1、為什么學(xué)R ? 事實(shí)上,我沒有編程經(jīng)驗(yàn),也沒有學(xué)過計(jì)算機(jī)。但是我知道如果要學(xué)習(xí)數(shù)據(jù)科學(xué),一個(gè)人必須學(xué)習(xí)R或Python作為開始學(xué)習(xí)的工具。我選擇了前者,同時(shí)在學(xué)習(xí)過程中我發(fā)現(xiàn)了一些使用R的好處: ? 用R語(yǔ)言編碼非常的簡(jiǎn)單; ? R是一個(gè)免費(fèi)的開源軟件,同時(shí)它可以直接在官網(wǎng)上下載; ? R語(yǔ)言中有來自于全世界愛好者貢獻(xiàn)的即時(shí)訪問超過7800個(gè)用于不同計(jì)算的R包。 ? R語(yǔ)言還有遍布全世界的學(xué)習(xí)社區(qū)及論壇,你能很輕松的獲取幫助; ? 我們憑借R包能夠獲得高性能的計(jì)算體驗(yàn); ? 它是,數(shù)據(jù)分析公司高度尋求技能之一。
2、如何安裝R / Rstudio? 你可以https://www.r-project.org/官網(wǎng)下載并安裝R,需要注意的是R的更新速度很快,下載新版本的體驗(yàn)會(huì)更好一些。 另外,我建議你從RStudio開始,因?yàn)镽Studio的界面編程體驗(yàn)更好一些。你可以通過https://www.rstudio.com/products/rstudio/download/ 在“支持的平臺(tái)上安裝”部分中, 根據(jù)您的操作系統(tǒng)選擇您需要的安裝程序。點(diǎn)擊桌面圖標(biāo)RStudio,就開始你的編程體驗(yàn),如下圖所示:
讓我們快速的了解:一下R界面 ? R script::在這個(gè)空間里可以寫代碼,要運(yùn)行這些代碼,只需選擇的代碼行和按下Ctrl + R即可或者,你可以點(diǎn)擊“運(yùn)行”按鈕位置在右上角R的腳本。 ? R console:這個(gè)區(qū)域顯示的輸出代碼運(yùn)行:,同時(shí)你可以在控制臺(tái)直接寫代碼。但是代碼直接進(jìn)入R控制臺(tái)無法追蹤。 ? R環(huán)境:這個(gè)空間是顯示設(shè)置的外部元素補(bǔ)充道。這里面包括數(shù)據(jù)集、變量向量,還可以檢查R數(shù)據(jù)是否被正確加載。 ? 圖形輸出窗口:這個(gè)空間顯示圖表中創(chuàng)建的探索性數(shù)據(jù)分析。不僅僅輸出圖形,您可以選擇包,尋求幫助和嵌入式R的官方文檔。
3、如何安裝包? R的計(jì)算能力在于它擁有強(qiáng)大的R包。在R中,大多數(shù)數(shù)據(jù)處理任務(wù)可以從兩方面進(jìn)行,使用R包和基本功能。在本教程中,我們將介紹最方便的和強(qiáng)大的R包。特別的,一般不太建議直接在R軟件的中直接安裝加載包,因?yàn)檫@樣可能會(huì)影響你的計(jì)算速度。我們建議你直接在R的官網(wǎng)上下載好您所需要的R包,通過本地安裝的形式進(jìn)行安裝,如下: 在軟件中安裝:install.packages(“package name”) 本地安裝: install.packages(“E:/r/ggplot2_2.1.0.zip”)
4、用R進(jìn)行基本的統(tǒng)計(jì)計(jì)算 讓我們開始熟悉R的編程環(huán)境及一些基本的計(jì)算,在R編程腳本窗口中輸入程序,如下:
類似地,您也可以自己嘗試各種組合的計(jì)算形式并得到結(jié)果。但是,如果你做了太多的計(jì)算,這樣的編程未免過于麻煩,在這種情況下,創(chuàng)建變量是一個(gè)有用的方法。在R中,您可以創(chuàng)建變量的形式來簡(jiǎn)化。創(chuàng)建變量時(shí)使用< -或=符號(hào),例如我想創(chuàng)建一個(gè)變量x計(jì)算7和8的總和,如下:
特別的,一旦我們創(chuàng)建一個(gè)變量,你不再直接得到的輸出,此時(shí)我們需要輸入對(duì)應(yīng)的變量然后再運(yùn)行結(jié)果。注意,變量可以是字母,字母數(shù)字而不是數(shù)字,數(shù)字是不能創(chuàng)建數(shù)值變量的、
二、編程基礎(chǔ)慨念及R包
1、R中的數(shù)據(jù)類型和對(duì)象 ? 數(shù)據(jù)類型 R中數(shù)據(jù)類型包括數(shù)值型,字符型,邏輯型,日期型及缺省值,這個(gè)數(shù)據(jù)類型我們?cè)谶\(yùn)用數(shù)據(jù)的過程中,大家很容易可以自行了解,在此不做詳細(xì)解釋。
? 數(shù)據(jù)對(duì)象 R中的數(shù)據(jù)對(duì)象主要包括向量(數(shù)字、整數(shù)等)、列表、數(shù)據(jù)框和矩陣。讓具體的進(jìn)行了解:
○1向量 正如上面提到的,一個(gè)向量包含同一個(gè)類的對(duì)象。但是,你也可以混合不同的類的對(duì)象。當(dāng)對(duì)象的不同的類混合在一個(gè)列表中,這種效應(yīng)會(huì)導(dǎo)致不同類型的對(duì)象轉(zhuǎn)換成一個(gè)類。例如:
注:1、檢查任何對(duì)象的類,使用class()函數(shù)的功能。 2、轉(zhuǎn)換一個(gè)數(shù)據(jù)的類,使用as.()函數(shù)
類似地,您可以自己嘗試改變其他任何的類向量
○2列表 一個(gè)列表是一種包含不同的數(shù)據(jù)類型的元素特殊類型的向量。例如
可以看出,,列表的輸出不同于一個(gè)向量。這是因?yàn)椴煌愋偷乃袑?duì)象。第一個(gè)雙括號(hào)[1]顯示了第一個(gè)元素包括的索引內(nèi)容,依次類推。另外的,您自己還可以嘗試:
○3矩陣 當(dāng)一個(gè)向量與行和列即維度屬性,它變成了一個(gè)矩陣。一個(gè)矩陣是由行和列組成的,讓我們?cè)囍鴦?chuàng)建一個(gè)3行2列的矩陣:
正如你所看到的,一個(gè)矩陣的維度你可以通過dim()或attributes()命令獲得,從一個(gè)矩陣中提取一個(gè)特定元素,只需使用上面矩陣的形式。例如
同樣的,,您還可以從個(gè)一個(gè)向量開始創(chuàng)建所需要的矩陣,我們,需要做的是利用dim()分配好維度。如下所示:
另外,你也可以加入兩個(gè)向量使用cbind()和rbind()函數(shù)。但是,需要確保兩向量相同數(shù)量的元素。如果沒有的話,它將返回NA值。
○4數(shù)據(jù)框 這是最常用的一種數(shù)據(jù)類型,它是用來存儲(chǔ)列表數(shù)據(jù)的。它不同于矩陣,在一個(gè)矩陣中,每一個(gè)元素必須有相同的類。但是,在一個(gè)數(shù)據(jù)框里你可以把向量包含不同類別的列表。這意味著,每一列的數(shù)據(jù)就像一個(gè)列表,每次你在R中讀取數(shù)據(jù)將被存儲(chǔ)在一個(gè)數(shù)據(jù)框中。例如:
讓我們解釋一下上面的代碼。df是數(shù)據(jù)框的名字。dim()返回?cái)?shù)據(jù)框的規(guī)格是4行2列,str()返回的是一個(gè)數(shù)據(jù)框的結(jié)構(gòu),nrow()和ncol()返回是數(shù)據(jù)框的行數(shù)和列數(shù)。特別的,我們需要理解一下R中缺失值的概念,NA代表缺失值,這也是預(yù)測(cè)建模的關(guān)鍵部分?,F(xiàn)在,我們示例檢查是否一個(gè)數(shù)據(jù)集有缺失值。
缺失值的存在嚴(yán)重阻礙了我們正常計(jì)算數(shù)據(jù)集。例如,因?yàn)橛袃蓚€(gè)缺失值,它不能直接做均值得分。例如:
na.rm = TRUE告訴R計(jì)算時(shí)忽略缺失值,只是計(jì)算選定的列中剩余值的均值(得分)。刪除在數(shù)據(jù)中的行和NA,您可以使用na.omit
2、R中的控制語(yǔ)句 正如它的名字一樣,這樣的語(yǔ)句在編碼中起控制函數(shù)的作用,寫一個(gè)函數(shù)也是一組多個(gè)命令自動(dòng)重復(fù)編碼的過程。例如:你有10個(gè)數(shù)據(jù)集,你想找到存在于每一個(gè)數(shù)據(jù)集中的“年齡”列。這可以通過兩種方法,一種需要我們運(yùn)行一個(gè)特定的程序運(yùn)行10次,另外一種就需要通過編寫一個(gè)控制語(yǔ)句來完成。我們先了解下R中的控制結(jié)構(gòu)簡(jiǎn)單的例子: ? If.else,這個(gè)結(jié)構(gòu)是用來測(cè)試一個(gè)條件的,下面是語(yǔ)法:
例子:
? For語(yǔ)句,這個(gè)結(jié)構(gòu)是當(dāng)一個(gè)循環(huán)執(zhí)行固定的次數(shù)時(shí)使用。下面是語(yǔ)法:
? while,語(yǔ)句 它首先測(cè)試條件,并只有在條件是正確的時(shí)才執(zhí)行,一旦執(zhí)行循環(huán),條件是再次測(cè)試,直到滿足指定的條件然后輸出。下面是語(yǔ)法
當(dāng)然,還有其他的控制結(jié)構(gòu),但不太常用的比上面的解釋。例如: Repeat 它執(zhí)行一個(gè)無限循環(huán) break——它打破循環(huán)的執(zhí)行 next——它允許跳過一個(gè)迭代循環(huán) return——它幫助退出函數(shù) 注意:如果你發(fā)現(xiàn)這部分的控制結(jié)構(gòu)難以理解,不用擔(dān)心。R語(yǔ)言中來自于眾多人貢獻(xiàn)的包,會(huì)幫助你很多。
3、常用的R包 在R的鏡像(CRAN)中,有超過7800個(gè)包可供大家調(diào)用,其中很多包可以用來預(yù)測(cè)建模在本文中,我們?cè)谙旅鏁?huì)簡(jiǎn)單的介紹其中幾個(gè)。之前,我們已經(jīng)解釋了安裝包的方法,大家可以根據(jù)自己的需要去下載安裝。
?導(dǎo)入數(shù)據(jù) R為數(shù)據(jù)的導(dǎo)入進(jìn)口提供了廣泛的包,并且可以接入任何格式的數(shù)據(jù)。如txt,,csv,,sql等均可快速導(dǎo)入大文件的數(shù)據(jù),。
?數(shù)據(jù)可視化 R同樣可以用來構(gòu)建繪圖命令并且是創(chuàng)建簡(jiǎn)單的圖表非常好用。但是,當(dāng)創(chuàng)建的圖形變得較為復(fù)雜時(shí),你應(yīng)該安裝ggplot2。
?數(shù)據(jù)操作 R中有很多關(guān)于數(shù)據(jù)操作集合的包,他們可以做基本的和先進(jìn)的快速計(jì)算、例如dplyr,plyr ,tidyr,lubricate,stringr等。
?建模學(xué)習(xí)/機(jī)器學(xué)習(xí) 對(duì)于模型學(xué)習(xí),caret包是強(qiáng)大到足以滿足大多創(chuàng)建機(jī)器學(xué)習(xí)模型的必要。當(dāng)然,您也可以安裝算法包,例如對(duì)于隨機(jī)森林,決策樹等等。
到這里為止,你會(huì)覺得對(duì)于R的相關(guān)組件都相對(duì)熟悉啦,從現(xiàn)在開始我們開始介紹一些關(guān)于模型預(yù)測(cè)的知識(shí)。
三、用R進(jìn)行數(shù)據(jù)預(yù)處理
從這一節(jié)開始,我們將深入閱讀預(yù)測(cè)建模的不同階段。對(duì)于數(shù)據(jù)的預(yù)處理是非常重要的,這一階段學(xué)習(xí)將強(qiáng)化我們的對(duì)數(shù)據(jù)操作的應(yīng)用,讓我們?cè)诮酉聛淼腞中去學(xué)習(xí)和應(yīng)用一下。在本教程中,我們以這個(gè)大市場(chǎng)銷售預(yù)測(cè)數(shù)據(jù)集為例。首先,我們先理解一下數(shù)據(jù)結(jié)構(gòu),如下圖:
1、數(shù)據(jù)集中基礎(chǔ)概念 ○1最后一列ItemOutlet_Sales為響應(yīng)變量(因變量y),是我們需要做出預(yù)測(cè)的。前面的變量是自變量xi,是用來預(yù)測(cè)因變量的。 ○2數(shù)據(jù)集 預(yù)測(cè)模型一般是通過訓(xùn)練數(shù)據(jù)集建立,訓(xùn)練數(shù)據(jù)總是包括反變量;測(cè)試數(shù)據(jù):一旦模型構(gòu)建,它在測(cè)試數(shù)據(jù)集中的測(cè)試是較為準(zhǔn)確的,這個(gè)數(shù)據(jù)總是比訓(xùn)練數(shù)據(jù)集包含更少數(shù)量的觀察值,而且是它不包括反應(yīng)變量的。
? 數(shù)據(jù)的導(dǎo)入和基本探索 ○1在使用R語(yǔ)言時(shí)一個(gè)重要設(shè)置是定義工作目錄,即設(shè)置當(dāng)前運(yùn)行路徑(這樣你的全部數(shù)據(jù)和程序都將保存在該目錄下)
一旦設(shè)置了目錄,我們可以很容易地導(dǎo)入數(shù)據(jù),使用下面的命令導(dǎo)入csv文件:
通過R環(huán)境檢查數(shù)據(jù)是否已成功加載,然后讓我們來探討數(shù)據(jù)
從結(jié)果我們可以看到訓(xùn)練集有8523行12列數(shù)據(jù),測(cè)試集有5681行和11列訓(xùn)練數(shù)據(jù),并且這也是正確的。測(cè)試數(shù)據(jù)應(yīng)該總是少一列的?,F(xiàn)在讓我們深入探索訓(xùn)練數(shù)據(jù)集
2、圖形表示 當(dāng)使用圖表來表示時(shí),我想大家會(huì)更好的了解這些變量。一般來講,我們可以從兩個(gè)方面分析數(shù)據(jù):單變量分析和雙變量分析。對(duì)于單變量分析來講較為簡(jiǎn)單,在此不做解釋。我們本文以雙變量分析為例: (對(duì)于可視化,我們將使用ggplot2包。這些圖可以幫助我們更好理解變量的分布和頻率的數(shù)據(jù)集)
? 首先做出Item_Visibility和Item_Outlet_Sales兩個(gè)變量的散點(diǎn)圖
從圖中,我們可以看到大多數(shù)銷售已從產(chǎn)品能見度小于0.2。這表明item_visibility < 0.2,則該變量必須是確定銷售的一個(gè)重要因素。
? 做出Outlet_Identifier和Item_Outlet_Sales兩個(gè)變量的柱狀關(guān)系圖
在這里,我們推斷可能是OUT027的銷量影響啦OUT35的銷量緊隨其后。OUT10和OUT19可能是由于最少的客流量,從而導(dǎo)致最少的出口銷售。
? 做出Outlet_type和Item_Outlet_Sales兩個(gè)變量的箱體圖
從這個(gè)圖表,我們可以推斷出水果和蔬菜最有利于銷售零食數(shù)量的出口,其次是家用產(chǎn)品。
? 做出Item_Type和Item_MRP兩個(gè)變量的箱線圖 這次我們使用箱線圖來表示,箱線圖的好處在于我們可以看到相應(yīng)變量的異常值和平均偏差水平。
在圖中,,黑色的點(diǎn)就是一個(gè)異常值,盒子里黑色的線是每個(gè)項(xiàng)目類型的平均值。
3、缺失值處理 缺失值對(duì)于自變量和因變量之間的關(guān)系有很大的影響。現(xiàn)在,讓我們理解一下缺失值的處理的知識(shí)。讓我們來做一些快速的數(shù)據(jù)探索,首先,我們將檢查數(shù)據(jù)是否有缺失值。
我們可以看出在訓(xùn)練數(shù)據(jù)集中有1463個(gè)缺失值。讓我們檢查這些缺失值的變量在哪里,其實(shí)很多數(shù)據(jù)科學(xué)家一再建議初學(xué)者在在數(shù)據(jù)探索階段應(yīng)密切關(guān)注缺失值。
因此,我們看到列Item_Weight 有1463個(gè)缺失的數(shù)據(jù)。從這個(gè)數(shù)據(jù)我們還可以得到更多的推論:
從圖中,我們可以看到每列的最小值,最大值,中位數(shù),平均值,缺失值的信息等等。我們看到變量Item_Weight中有缺失值,而且Item_Weight是一個(gè)連續(xù)變量。因此,在這種情況下,我們一般用樣本中變量的均值或中位數(shù)賦值給缺失值。計(jì)算變量item_weight的均值和中位數(shù),這是最常用處理缺失值的的方法,其他的方法在此不贅述。
我們可以先把兩個(gè)數(shù)據(jù)集合并,這樣就不需要編寫?yīng)毩⒕幋a訓(xùn)練和測(cè)試數(shù)據(jù)集,這也會(huì)節(jié)省我們的計(jì)算時(shí)間。但是合并結(jié)合兩個(gè)數(shù)據(jù)框,我們必須確保他們相同的列,如下:
我們知道,測(cè)試數(shù)據(jù)集有個(gè)少一列因變量。首先來添加列,我們可以給這個(gè)列賦任何值。一個(gè)直觀的方法是我們可以從訓(xùn)練數(shù)據(jù)集中提取銷售的平均值,并使用$Item_Outlet_Sales作為測(cè)試變量的銷售列。不過,在此,我們讓它簡(jiǎn)單化給最后一列賦值為1。
接下來我們先來計(jì)算中位數(shù),選用中位數(shù)是因?yàn)樗陔x散值中很有代表性。
4、連續(xù)變量和分類變量的處理 在數(shù)據(jù)處理中,對(duì)連續(xù)數(shù)據(jù)集和分類變量的非別處理是非常重要的。在這個(gè)數(shù)據(jù)集,我們只有3個(gè)連續(xù)變量,其他的是分類變量。如果你仍然感到困惑,建議你再次使用str()查看數(shù)據(jù)集。
對(duì)于變量Item_Visibility,在上面的圖中可以看到該項(xiàng)中有的能見度為零值,這幾乎是不可行的。因此,我們考慮將它看成缺失值,用中位數(shù)來處理。
現(xiàn)在讓我們繼續(xù)處理一下分類變量。在初步的數(shù)據(jù)探索中,我們看到有錯(cuò)誤的水平變量需要糾正。
使用上面的命令,我們指定的名稱“others”為其他未命名的變量,簡(jiǎn)要?jiǎng)澐至薎tem_Fat_Content的等級(jí)。
5、特征值變量計(jì)算 現(xiàn)在我們已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代,很多時(shí)候需要大量的數(shù)據(jù)算法計(jì)算,但是之前所選出的變量不一定會(huì)和模型擬合的效果很好。,所以我們需要提取新的變量,提供盡可能多的“新”的信息來幫助模型做出更準(zhǔn)確的預(yù)測(cè)。以合并后的數(shù)據(jù)集為例,你覺得哪些因素)可能會(huì)影響Item_Outlet_Sales?
? 關(guān)于商店種類變量計(jì)算 在源數(shù)據(jù)中有10個(gè)不同的門店,門店的數(shù)目越多,說明某種商品更容易在這個(gè)商店中售出。
注:管道函數(shù)的思路,將左邊的值管道輸出為右邊調(diào)用的函數(shù)的第一個(gè)參數(shù)。
? 商品種類計(jì)算 同樣的,我們也可以計(jì)算商品種類的信息,這樣我們可以通過結(jié)果看到商品在各家商店出現(xiàn)的頻率。
? 商店的成立時(shí)間的變量探索 我們假設(shè)商店的成立時(shí)間越久,該商店的客流量和產(chǎn)品銷量越會(huì)越多。
以第一個(gè)年份為例,這表明機(jī)構(gòu)成立于1999年,已有14年的歷史(以2013年為截止年份)。 注:mutate函數(shù),是對(duì)已有列進(jìn)行數(shù)據(jù)運(yùn)算并添加為新列。
? 商品所屬類型的相關(guān)計(jì)算 通過對(duì)商品所屬類型的計(jì)算,我們可以從其中發(fā)現(xiàn)人們的消費(fèi)趨勢(shì)。從數(shù)據(jù)中們可以看出仔細(xì)看商品標(biāo)注DR的,大多是可以吃的食物。對(duì)于FD,大多是屬于飲品類的。同樣的我們注意到到NC類,可能是生活用品(非消耗品),但是NC類中的所標(biāo)注較為復(fù)雜。于是,我們將把這些變量提取出來,并放到一個(gè)新變量中。在這里我將使用substr()和gsub()函數(shù)來實(shí)現(xiàn)提取和重命名變量。
當(dāng)然,你也可以試著去增加一些新變量幫助構(gòu)建更好的模型,但是,增加新變量時(shí)必須使它與其他的變量之間是不相關(guān)的。如果你不確定與其他變量之間是否存在相關(guān)關(guān)系,可以通過函數(shù)cor()來進(jìn)行判斷。
? 對(duì)字符變量進(jìn)行編碼 ○1標(biāo)簽編碼 這一部分的任務(wù)是將字符型的標(biāo)簽進(jìn)行編碼,例如在在我們的數(shù)據(jù)集中,變量Item_Fat_Content有2個(gè)級(jí)別低脂肪和常規(guī),我們將低脂編碼為0和常規(guī)型的編碼為1 。因?yàn)檫@樣能夠幫助我們進(jìn)行定量的分析。 我們可以通過ifelse語(yǔ)句來實(shí)現(xiàn)。
○2獨(dú)熱編碼 獨(dú)熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都由有獨(dú)立的寄存器位,并且在任意時(shí)候,其中只有一位有效。例如:變量Outlet_ Location_Type。它有三個(gè)層次在獨(dú)熱編碼中,,將創(chuàng)建三個(gè)不同變量1和0組成。1將代表變量存在,,0代表變量不存在。如下::
這是一個(gè)獨(dú)熱編碼的示范。希望你現(xiàn)在已經(jīng)理解這個(gè)概念?,F(xiàn)在這們將這種技術(shù)也適用于我們的數(shù)據(jù)集分類變量中(不含ID變量)。
以上,我們介紹了兩種不同方法在R中去做獨(dú)熱編碼,我們可以檢查一下編碼是否已經(jīng)完成
我們可以看出獨(dú)熱編碼之后,之前的變量是已經(jīng)自動(dòng)被移除了數(shù)據(jù)集。
四、用機(jī)器學(xué)習(xí)方法進(jìn)行預(yù)測(cè)建模
在進(jìn)行構(gòu)造數(shù)據(jù)模型前,我們將刪除之前已經(jīng)被轉(zhuǎn)過的原始變量,可以通過使用dplyr包中的select()實(shí)現(xiàn),如下:
在本節(jié)中,我將介紹回歸、決策樹和隨機(jī)森林等算法。這些算法的詳細(xì)解釋已經(jīng)超出了本文的范圍,如果你想詳細(xì)的了解,推薦大家看機(jī)器學(xué)習(xí)的相關(guān)書籍?,F(xiàn)在我們要將兩個(gè)數(shù)據(jù)集分開,以便我們來進(jìn)行預(yù)測(cè)建模。如下:
1、多元線性回歸
使用多元回歸建模時(shí),一般用于響應(yīng)變量(因變量)是連續(xù)型和可供預(yù)測(cè)變量有很多時(shí)。如果它因變量被分類,我們一般會(huì)使用邏輯回歸。在我們做回歸前,我們先來了解一些回歸的基本假設(shè): ? 在響應(yīng)變量和自變量之間存在某種線性關(guān)系; ? 各個(gè)自變量之間是不相關(guān)的,如果存在相關(guān)關(guān)系,我們稱這個(gè)模型出現(xiàn)了多重共線性。 ? 誤差項(xiàng)也是要求不相關(guān)的。否則,它將導(dǎo)致模型出現(xiàn)自相關(guān)。 ? 誤差項(xiàng)必須有恒定方差。否則,它將導(dǎo)致模型出現(xiàn)異方差性。 在R中我們使用lm()函數(shù)來做回歸,如下:
調(diào)整后的R2可以很好的衡量一個(gè)回歸模型的擬合優(yōu)度。R2越高說明模型擬合的越好從上圖可以看出adjusted R2= 0.2084。這意味著我們擬合的這個(gè)模型很不理想。而且可以p值看出這些新變量例如Item count, Outlet Count 和 Item_Type_New.對(duì)于我們的模型構(gòu)造而言并沒有什么幫助,因?yàn)樗鼈兊膕ign.遠(yuǎn)小于0.05的顯著性水平。對(duì)模型重要的變量是p值小于0.05的變量,也就是上圖中后面帶有*的變量。
另外,我們知道變量之間存在相關(guān)性,會(huì)影響模型的準(zhǔn)確性,我們可以利用cor()函數(shù)來看一下各變量之間的相關(guān)關(guān)系。如下: cor(new_train)
另外,您還可以使用corrplot包來做相關(guān)系數(shù),如下的程序就幫助我們找到一個(gè)共線性很強(qiáng)的兩個(gè)變量
可以看出變量Outlet_Count與變量Outlet_Type_Grocery Store成高度負(fù)相關(guān)關(guān)系。另外,我們通過剛才的分析發(fā)現(xiàn)了模型中的一些問題: ? 模型中有相關(guān)關(guān)系的變量存在; ? 我們做了獨(dú)熱編碼編碼和標(biāo)簽編碼,但從結(jié)果來看,通過創(chuàng)建虛擬變量對(duì)于這個(gè)線性回歸模型的創(chuàng)建意義不大。 ? 創(chuàng)建的新變量對(duì)于回歸模型的擬合也沒有很大影響。
接下來,我們嘗試創(chuàng)建不含編碼和新變量的較大的回歸模型。如下:
上圖中可以看到,調(diào)整后的R2= 0.5623。這告訴我們,有時(shí)只需你的計(jì)算過程簡(jiǎn)單一些可能會(huì)得到更精確的結(jié)果。讓我們從一些回歸圖中去發(fā)現(xiàn)一些能夠提高模型精度的辦法。
從左上的第一個(gè)殘差擬合圖中我們可以看出實(shí)際值與預(yù)測(cè)值之間殘差不是恒定的,這說明該模型中存在著異方差。解決異方差性的一個(gè)常見的做法就是對(duì)響應(yīng)變量取對(duì)數(shù)(減少誤差)。
可以看出調(diào)整后的R2= 0.72,說明模型的構(gòu)建有了顯著的改善,我們可以再做一次擬合回歸圖
上圖中,殘差值與擬合值之間已經(jīng)沒有了長(zhǎng)期趨勢(shì),說明該模型的擬合效果理想。我們也經(jīng)常用RMSE來衡量模型的好壞,并且我們可以通過這個(gè)值與其他算法相比較。如下所示
接下來讓我們進(jìn)行決策樹算法來改善我們的RMSE得分
2、決策樹
決策樹算法一般優(yōu)于線性回歸模型,我們簡(jiǎn)單介紹一下 ,在機(jī)器學(xué)習(xí)中決策樹是一個(gè)預(yù)測(cè)模型。他代表的是對(duì)象屬性與對(duì)象值之間的一種映射關(guān)系。樹中每個(gè)節(jié)點(diǎn)表示某個(gè)對(duì)象,而每個(gè)分叉路徑則代表的某個(gè)可能的屬性值,而每個(gè)葉結(jié)點(diǎn)則對(duì)應(yīng)從根節(jié)點(diǎn)到該葉節(jié)點(diǎn)所經(jīng)歷的路徑所表示的對(duì)象的值。
在R中,決策樹算法的實(shí)現(xiàn)可以使用rpart包。此外,我們將使用caret包做交叉驗(yàn)證。通過交叉驗(yàn)證技術(shù)來構(gòu)建較復(fù)雜的模型時(shí)可以使模型不容易出現(xiàn)過度擬合的情況。(關(guān)于交叉驗(yàn)證讀者可自行查閱)另外,,決策樹使用參數(shù)CP來衡量訓(xùn)練集的復(fù)雜性和準(zhǔn)確性。參數(shù)較小的CP值可能將導(dǎo)致更大的決策樹,這也可能會(huì)出現(xiàn)過度擬合的模型。相反,參數(shù)大的CP值也導(dǎo)致擬合不充分的模型,也就是我們不能準(zhǔn)確的把握所需變量的信息。以下我們選用五折交叉驗(yàn)證法來找出具有最優(yōu)CP的模型。
從上圖可以看出,參數(shù)cp = 0.01所對(duì)應(yīng)的RMSE最小,在此我們只提供了部分的數(shù)據(jù),你可以在R consle中查詢到更多信息。
prp(main_tree) #輸出決策樹
![]()
以上就是我們決策樹模型的結(jié)構(gòu),而且我們可以明顯看出變量Item_MRP是最重要的根節(jié)點(diǎn),作為最重要的變量也就是根節(jié)點(diǎn),來劃分預(yù)測(cè)未來的銷售量。此外讓我們檢查一下這個(gè)模型的RMSE是否有所改善。
可以看出,通過決策樹做出的誤差為1102.774,比線性回歸得出的誤差小。說明這種方法更優(yōu)一些。當(dāng)然你也可以通過調(diào)參數(shù)來進(jìn)一步優(yōu)化降低這個(gè)誤差(如使用十折交叉驗(yàn)證的方法)
3、隨機(jī)森林
隨機(jī)森林顧名思義,是用隨機(jī)的方式建立一個(gè)森林,森林里面有很多的決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個(gè)新的輸入樣本進(jìn)入的時(shí)候,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個(gè)樣本應(yīng)該屬于哪一類(對(duì)于分類算法),然后看看哪一類被選擇最多,就預(yù)測(cè)這個(gè)樣本為那一類。隨機(jī)森林算法可以很好的處理缺失值,異常值和其他非線性的數(shù)據(jù),其他相關(guān)知識(shí)讀者可以自行查閱。
在以上的語(yǔ)句中,可以看到=“parRF”,這是隨機(jī)森林的并行實(shí)現(xiàn)。這個(gè)包讓你在計(jì)算隨機(jī)森林時(shí)花費(fèi)較短的時(shí)間。或者,你也可以嘗試使用rf方法作為標(biāo)準(zhǔn)隨機(jī)森林的功能。從以上結(jié)果中我們選擇RMSE最小的即選擇mtry = 15,我們嘗試用1000棵樹做計(jì)算,如下:
這個(gè)模型中可得出RMSE = 1132.04,并沒有改進(jìn)決策樹模型。另外,隨機(jī)森林的一個(gè)功能是可以展示重要變量。我們通過下圖可以看到最重要的變量是Item_MRP(通過決策樹算法也已經(jīng)表示出來)。
顯然,這個(gè)模型可以進(jìn)一步進(jìn)行嘗試調(diào)優(yōu)參數(shù)的。同時(shí),讓我們用RMSE最好的決策樹來對(duì)測(cè)試集做擬合。如下所示:
當(dāng)預(yù)測(cè)其他樣本外數(shù)據(jù),我們可以得出RMSE是1174.33,這個(gè)模型是也可以通過調(diào)參數(shù)達(dá)到更優(yōu)的,以下列出幾種方法: ? 本例我們沒有使用標(biāo)簽編碼和獨(dú)熱編碼,希望你可以嘗試以下編碼來做隨機(jī)森林模型。 ? 調(diào)整相關(guān)的參數(shù)。 ? 使用Gradient Boosting來做模型。 ? 建立一個(gè)新的整體模型。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03