轉(zhuǎn)帖|使用教程|編輯:龔雪|2017-04-17 10:47:02.000|閱讀 375 次
概述:如果你是一個機器學(xué)習的初學(xué)者,本系列文章將教你用R語言開啟機器學(xué)習之旅
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|陸勤
我們將要使用iris這個數(shù)據(jù)集。這個數(shù)據(jù)集是非常有名的,因為這是機器學(xué)習和統(tǒng)計學(xué)里的”hello world”類數(shù)據(jù)集,這對于每個人來說都非常實用。
這個數(shù)據(jù)集含有150個觀測值,而且這個數(shù)據(jù)集有4列,這些列表示花的直徑的測量。而這個數(shù)據(jù)集的第五列就是花的類型,而所有的觀測值則是3種花里的其中一種。
關(guān)于這個數(shù)據(jù)集的更多細節(jié),你可以上維基百科尋找,網(wǎng)址:
接下來,我們要對這個數(shù)據(jù)集進行如下操作:
1 以一個簡單的方式導(dǎo)入iris數(shù)據(jù)集
2 以CSV格式(其它格式也可以)導(dǎo)入iris數(shù)據(jù)集
3 把這個數(shù)據(jù)集分解成訓(xùn)練數(shù)據(jù)集和驗證數(shù)據(jù)集
你可以自行選擇方法導(dǎo)入這些數(shù)據(jù),或者直接按照上面的步驟執(zhí)行。
幸運的是,iris這個數(shù)據(jù)集是系統(tǒng)自帶的,也就是說安裝好R以后就有?,F(xiàn)在,按照以下操作導(dǎo)入數(shù)據(jù):
#attach the iris dataset to the environment data(iris) #rename the dataset dataset <- iris
這時你已經(jīng)完成了iris數(shù)據(jù)集的導(dǎo)入,現(xiàn)在,你需要檢驗這個數(shù)據(jù)集了。
我喜歡把載入的數(shù)據(jù)稱為“數(shù)據(jù)集”。如果你想對你的項目和數(shù)據(jù)集(它們之間總是名字相同)之間進行代碼的粘貼,那么,這里確實會給到你幫助。
也許,你是一個純粹主義者,而且,你是想以你自己的方式導(dǎo)入CSV格式的數(shù)據(jù)集到你的機器學(xué)習項目的話,可以參照下面的做法:
從
UCIMachine Learning Repository
(這里有一個直接找到這個數(shù)據(jù)集的 鏈接 )
這里下載iris數(shù)據(jù)集。
把文件以iris.csv的形式保存的你的工作目錄中。
載入CSV格式數(shù)據(jù)詳細操作如下:
#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ù)集,同時也可以使用里面的變量了。
我們需要知道我們現(xiàn)在所建立的模型足夠好。
然后,我們會在那些未知的數(shù)據(jù)中運用相關(guān)統(tǒng)計方法建模以預(yù)測這些模型的精度。我們還需要進行更多高質(zhì)量的模型精度測試以估計出這個模型是否在這些未知的數(shù)據(jù)中是最好的,這樣我們要通過對真實的未知的數(shù)據(jù)進行估計。
這時,我們需要看回我們的數(shù)據(jù)集,而我們所用的算法將看不到這些數(shù)據(jù),而我們就是要用這些數(shù)據(jù)來得到其次而獨立的,關(guān)于如何知道最好的模型大致是怎樣的情況這一定論。
我們要把這個數(shù)據(jù)集進行分離操作,80%的數(shù)據(jù)用于進行進行訓(xùn)練,而剩下的20%則用來進行驗證。
#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ù)集和將在后來要用到的驗證變量的驗證集。
注意我們采用80%的樣本數(shù)據(jù)取代我們的數(shù)據(jù)集,這個嘗試為了讓我們后面代碼更簡潔和可讀。
現(xiàn)在,是時候要看看我們的數(shù)據(jù)了。
在這一步,我們會用不同的方法來看這個數(shù)據(jù)集:
1這個數(shù)據(jù)集的維度。
2屬性的類型。
3查看你的數(shù)據(jù)集。
4分類屬性的層次。
5每一類所產(chǎn)生的異常值。
6對于所有屬性的統(tǒng)計歸納。
不要擔心,看到的數(shù)據(jù)都是以一行命令的形式展現(xiàn)。這些命令是非常有用的,尤其是你想要進行你項目的后續(xù)工作時。
我們快速瀏覽一下dim函數(shù)里一共有多少實例(行)以及多少個屬性(列)。
#dimensions of dataset dim(dataset)
你應(yīng)該能看到120個實例和5個屬性:
1120 5
得到這些屬性的相關(guān)信息是一個不錯的主意。它們可以是雙精度值、整數(shù)值、字符串、因子和其它類型。
知道這些類型是很重要的,就像告訴你怎樣更好的匯總你所得到的數(shù)據(jù)以及它們的類型的轉(zhuǎ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ù)也是一個不錯的主意。
#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
分類變量就是因子的一種形式。一個因子的分類有很多分類標簽或?qū)哟危屛覀兛纯催@些層次:
#list the levels for the class levels(dataset$Species)
留意一下我們上面是怎樣把數(shù)據(jù)集里的屬性轉(zhuǎn)換成合適的名字的形式。下面的結(jié)果我們可以看到3個標簽:
1“setosa” “versicolor” “virginica”
這是一個多層次或多項的分類問題。這里如果有2個層次,那么它是一個二次分類問題。
現(xiàn)在,我們看一下數(shù)據(jù)集里的實例(行)都屬于什么類型。我們可以以絕對值和百分數(shù)的形式觀察它們:
1#summarize the class distribution 2percentage <- prop.table(table(dataset$Species)) * 100 3cbind(freq=table(dataset$Species), percentage=percentage)
我們可以看到,每個層次都有相同數(shù)量的實例(這個數(shù)據(jù)集的40%或33%)。
1freq percentage
2setosa 40 33.33333
3versicolor 40 33.33333
4virginica 40 33.33333
現(xiàn)在到了最后,我們看一下統(tǒng)計歸納以后各屬性的相關(guān)信息。
這里包含平均值、最值,以及分位數(shù)(25分位數(shù)、中位數(shù)、75分位數(shù)等等處在分位點的數(shù),只要我們要求哪個分位點的數(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)在,我們對數(shù)據(jù)集進行初步的探索。我們需要運用數(shù)據(jù)可視化操作進行更深層次的探索。
接下來,我們將要看到2種圖像:
1畫單變量圖以了解每個屬性的相關(guān)信息。
2畫多變量圖來了解每個屬性之間存在的關(guān)系。
我們從單變量圖像開始,看看圖像里每個變量大致的分布情況。
運用可視化操作把數(shù)據(jù)里的輸入屬性和輸出屬性轉(zhuǎn)化為相關(guān)信息?,F(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)出來:
我們也可以對特殊的層次變量作條形圖來得到數(shù)據(jù)里各個分類在圖像里的分布情況(通常來說它看起來很無趣,因為這種圖像看起來平的)。
plot(y)
現(xiàn)在,我們看一下變量之間的相關(guān)關(guān)系。
首先,我們對所有的屬性兩兩的作散點圖,并通過它們的層次設(shè)置不同的顏色。此外,由于散點圖在展示每個層次的點都是分開來的,我們可以在這些點周圍畫一個橢圓。
#scatterplot matrix featurePlot(x=x, y=y,plot="ellipse")
現(xiàn)在,我們對分類變量里的輸入變量屬性和輸出變量屬性直接的關(guān)系有了清楚的認識:
我們也可以再一次以箱圖和晶須圖的形式觀察輸入變量,但是這一次我們要根據(jù)層次把這些點分開來。這能讓我們在各層次之間的線性分離中有效地提取相關(guān)信息。
featurePlot(x=x,y=y, plot=”box”)
這對于我們清楚觀察每個層次的值的屬性的不同分布是非常有用的。
接下來,我們從每個屬性的分布中提取相關(guān)信息,我們再一次運用箱圖和晶須圖,同樣把層次的值進行分離。有時使用直方圖能取得良好的效果,但這一次,我們會使用密度函數(shù)圖像,并配上平滑的曲線來展示每一個屬性的分布情況:
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)
就像箱圖所展示的那樣,我們可以看到不同層次里每個熟悉的分布。我們也可以看到每個屬性所呈現(xiàn)的高斯分布(鐘形曲線)圖像:
英文鏈接:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn