轉(zhuǎn)帖|使用教程|編輯:龔雪|2017-04-17 10:47:02.000|閱讀 375 次
概述:如果你是一個(gè)機(jī)器學(xué)習(xí)的初學(xué)者,本系列文章將教你用R語言開啟機(jī)器學(xué)習(xí)之旅
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|陸勤
我們將要使用iris這個(gè)數(shù)據(jù)集。這個(gè)數(shù)據(jù)集是非常有名的,因?yàn)檫@是機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)里的”hello world”類數(shù)據(jù)集,這對(duì)于每個(gè)人來說都非常實(shí)用。
這個(gè)數(shù)據(jù)集含有150個(gè)觀測值,而且這個(gè)數(shù)據(jù)集有4列,這些列表示花的直徑的測量。而這個(gè)數(shù)據(jù)集的第五列就是花的類型,而所有的觀測值則是3種花里的其中一種。
關(guān)于這個(gè)數(shù)據(jù)集的更多細(xì)節(jié),你可以上維基百科尋找,網(wǎng)址:
接下來,我們要對(duì)這個(gè)數(shù)據(jù)集進(jìn)行如下操作:
1 以一個(gè)簡單的方式導(dǎo)入iris數(shù)據(jù)集
2 以CSV格式(其它格式也可以)導(dǎo)入iris數(shù)據(jù)集
3 把這個(gè)數(shù)據(jù)集分解成訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集
你可以自行選擇方法導(dǎo)入這些數(shù)據(jù),或者直接按照上面的步驟執(zhí)行。
幸運(yùn)的是,iris這個(gè)數(shù)據(jù)集是系統(tǒng)自帶的,也就是說安裝好R以后就有。現(xiàn)在,按照以下操作導(dǎo)入數(shù)據(jù):
#attach the iris dataset to the environment data(iris) #rename the dataset dataset <- iris
這時(shí)你已經(jīng)完成了iris數(shù)據(jù)集的導(dǎo)入,現(xiàn)在,你需要檢驗(yàn)這個(gè)數(shù)據(jù)集了。
我喜歡把載入的數(shù)據(jù)稱為“數(shù)據(jù)集”。如果你想對(duì)你的項(xiàng)目和數(shù)據(jù)集(它們之間總是名字相同)之間進(jìn)行代碼的粘貼,那么,這里確實(shí)會(huì)給到你幫助。
也許,你是一個(gè)純粹主義者,而且,你是想以你自己的方式導(dǎo)入CSV格式的數(shù)據(jù)集到你的機(jī)器學(xué)習(xí)項(xiàng)目的話,可以參照下面的做法:
從
UCIMachine Learning Repository
(這里有一個(gè)直接找到這個(gè)數(shù)據(jù)集的 鏈接 )
這里下載iris數(shù)據(jù)集。
把文件以iris.csv的形式保存的你的工作目錄中。
載入CSV格式數(shù)據(jù)詳細(xì)操作如下:
#define the filename filename <- "iris.csv" #load the CSV file from the local directory dataset <- read.csv(filename, header=FALSE) #set the column names in the dataset colnames(dataset) <- c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species")
你現(xiàn)在已經(jīng)載入好iris數(shù)據(jù)集,同時(shí)也可以使用里面的變量了。
我們需要知道我們現(xiàn)在所建立的模型足夠好。
然后,我們會(huì)在那些未知的數(shù)據(jù)中運(yùn)用相關(guān)統(tǒng)計(jì)方法建模以預(yù)測這些模型的精度。我們還需要進(jìn)行更多高質(zhì)量的模型精度測試以估計(jì)出這個(gè)模型是否在這些未知的數(shù)據(jù)中是最好的,這樣我們要通過對(duì)真實(shí)的未知的數(shù)據(jù)進(jìn)行估計(jì)。
這時(shí),我們需要看回我們的數(shù)據(jù)集,而我們所用的算法將看不到這些數(shù)據(jù),而我們就是要用這些數(shù)據(jù)來得到其次而獨(dú)立的,關(guān)于如何知道最好的模型大致是怎樣的情況這一定論。
我們要把這個(gè)數(shù)據(jù)集進(jìn)行分離操作,80%的數(shù)據(jù)用于進(jìn)行進(jìn)行訓(xùn)練,而剩下的20%則用來進(jìn)行驗(yàn)證。
#create a list of 80% of the rows in the original dataset we can use for training validation_index <- createDataPartition(dataset$Species, p=0.80, list=FALSE) #select 20% of the data for validation validation <- dataset[-validation_index,] #use the remaining 80% of data to training and testing the models dataset <- dataset[validation_index,]
在數(shù)據(jù)集中你現(xiàn)在有了訓(xùn)練數(shù)據(jù)集和將在后來要用到的驗(yàn)證變量的驗(yàn)證集。
注意我們采用80%的樣本數(shù)據(jù)取代我們的數(shù)據(jù)集,這個(gè)嘗試為了讓我們后面代碼更簡潔和可讀。
現(xiàn)在,是時(shí)候要看看我們的數(shù)據(jù)了。
在這一步,我們會(huì)用不同的方法來看這個(gè)數(shù)據(jù)集:
1這個(gè)數(shù)據(jù)集的維度。
2屬性的類型。
3查看你的數(shù)據(jù)集。
4分類屬性的層次。
5每一類所產(chǎn)生的異常值。
6對(duì)于所有屬性的統(tǒng)計(jì)歸納。
不要擔(dān)心,看到的數(shù)據(jù)都是以一行命令的形式展現(xiàn)。這些命令是非常有用的,尤其是你想要進(jìn)行你項(xiàng)目的后續(xù)工作時(shí)。
我們快速瀏覽一下dim函數(shù)里一共有多少實(shí)例(行)以及多少個(gè)屬性(列)。
#dimensions of dataset dim(dataset)
你應(yīng)該能看到120個(gè)實(shí)例和5個(gè)屬性:
1120 5
得到這些屬性的相關(guān)信息是一個(gè)不錯(cuò)的主意。它們可以是雙精度值、整數(shù)值、字符串、因子和其它類型。
知道這些類型是很重要的,就像告訴你怎樣更好的匯總你所得到的數(shù)據(jù)以及它們的類型的轉(zhuǎn)換形式那樣,你也許在建模之前就會(huì)這樣的去準(zhǔn)備數(shù)據(jù)。
#list types for each attribute sapply(dataset, class)
你應(yīng)該能看到輸入值是雙精度類型,而它的分類類型則是因子。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric""factor"
預(yù)覽一下你的數(shù)據(jù)也是一個(gè)不錯(cuò)的主意。
#take a peek at the first 5 rows of the data head(dataset)
你可以看一下前5行的數(shù)據(jù):
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
分類變量就是因子的一種形式。一個(gè)因子的分類有很多分類標(biāo)簽或?qū)哟危屛覀兛纯催@些層次:
#list the levels for the class levels(dataset$Species)
留意一下我們上面是怎樣把數(shù)據(jù)集里的屬性轉(zhuǎn)換成合適的名字的形式。下面的結(jié)果我們可以看到3個(gè)標(biāo)簽:
1“setosa” “versicolor” “virginica”
這是一個(gè)多層次或多項(xiàng)的分類問題。這里如果有2個(gè)層次,那么它是一個(gè)二次分類問題。
現(xiàn)在,我們看一下數(shù)據(jù)集里的實(shí)例(行)都屬于什么類型。我們可以以絕對(duì)值和百分?jǐn)?shù)的形式觀察它們:
1#summarize the class distribution 2percentage <- prop.table(table(dataset$Species)) * 100 3cbind(freq=table(dataset$Species), percentage=percentage)
我們可以看到,每個(gè)層次都有相同數(shù)量的實(shí)例(這個(gè)數(shù)據(jù)集的40%或33%)。
1freq percentage
2setosa 40 33.33333
3versicolor 40 33.33333
4virginica 40 33.33333
現(xiàn)在到了最后,我們看一下統(tǒng)計(jì)歸納以后各屬性的相關(guān)信息。
這里包含平均值、最值,以及分位數(shù)(25分位數(shù)、中位數(shù)、75分位數(shù)等等處在分位點(diǎn)的數(shù),只要我們要求哪個(gè)分位點(diǎn)的數(shù)表示出來,它都可以在相關(guān)屬性中展現(xiàn)出來)。
#summarize attribute distributions summary(dataset)
我們現(xiàn)在看到了所有數(shù)值屬性都含有相同的刻度(厘米)以及相似的厘米區(qū)間[0,0.8]。
1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2 Min. :4.300 Min. :2.00 Min. :1.000 Min. :0.100 setosa :40
3 1st Qu.:5.100 1st Qu.:2.80 1st Qu.:1.575 1st Qu.:0.300 versicolor:40
4 Median :5.800 Median :3.00 Median :4.300 Median :1.350 virginica:40
5 Mean :5.834 Mean :3.07 Mean :3.748 Mean :1.213
6 3rd Qu.:6.400 3rd Qu.:3.40 3rd Qu.:5.100 3rd Qu.:1.800
7 Max. :7.900 Max. :4.40 Max. :6.900 Max. :2.500
現(xiàn)在,我們對(duì)數(shù)據(jù)集進(jìn)行初步的探索。我們需要運(yùn)用數(shù)據(jù)可視化操作進(jìn)行更深層次的探索。
接下來,我們將要看到2種圖像:
1畫單變量圖以了解每個(gè)屬性的相關(guān)信息。
2畫多變量圖來了解每個(gè)屬性之間存在的關(guān)系。
我們從單變量圖像開始,看看圖像里每個(gè)變量大致的分布情況。
運(yùn)用可視化操作把數(shù)據(jù)里的輸入屬性和輸出屬性轉(zhuǎn)化為相關(guān)信息。現(xiàn)在我們開始畫單變量圖像,且設(shè)輸入變量為x,輸出變量為y(或者層次):
1 # split input and output
2 x <- dataset[,1:4]
3 y <- dataset[,5]
我們看到輸入變量是數(shù)值形式,接下來,我們畫一下箱圖和條形圖:
par(mfrow=c(1,4)) for(i in 1:4) { boxplot(x[,i],main=names(iris)[i]) }
這樣就把輸入變量的分布情況清清楚楚的展現(xiàn)出來:
我們也可以對(duì)特殊的層次變量作條形圖來得到數(shù)據(jù)里各個(gè)分類在圖像里的分布情況(通常來說它看起來很無趣,因?yàn)檫@種圖像看起來平的)。
plot(y)
現(xiàn)在,我們看一下變量之間的相關(guān)關(guān)系。
首先,我們對(duì)所有的屬性兩兩的作散點(diǎn)圖,并通過它們的層次設(shè)置不同的顏色。此外,由于散點(diǎn)圖在展示每個(gè)層次的點(diǎn)都是分開來的,我們可以在這些點(diǎn)周圍畫一個(gè)橢圓。
#scatterplot matrix featurePlot(x=x, y=y,plot="ellipse")
現(xiàn)在,我們對(duì)分類變量里的輸入變量屬性和輸出變量屬性直接的關(guān)系有了清楚的認(rèn)識(shí):
我們也可以再一次以箱圖和晶須圖的形式觀察輸入變量,但是這一次我們要根據(jù)層次把這些點(diǎn)分開來。這能讓我們?cè)诟鲗哟沃g的線性分離中有效地提取相關(guān)信息。
featurePlot(x=x,y=y, plot=”box”)
這對(duì)于我們清楚觀察每個(gè)層次的值的屬性的不同分布是非常有用的。
接下來,我們從每個(gè)屬性的分布中提取相關(guān)信息,我們?cè)?一次運(yùn)用箱圖和晶須圖,同樣把層次的值進(jìn)行分離。有時(shí)使用直方圖能取得良好的效果,但這一次,我們會(huì)使用密度函數(shù)圖像,并配上平滑的曲線來展示每一個(gè)屬性的分布情況:
1 # density plots for each attribute by class value 2 scales <- list(x=list(relation="free"), y=list(relation="free")) 3 featurePlot(x=x, y=y, plot="density", scales=scales)
就像箱圖所展示的那樣,我們可以看到不同層次里每個(gè)熟悉的分布。我們也可以看到每個(gè)屬性所呈現(xiàn)的高斯分布(鐘形曲線)圖像:
英文鏈接:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn