天天看點

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

在收集資料并把它們載入r資料結構以後,機器學習的下一個步驟是仔細檢查資料。在這個步驟中,你将開始探索資料的特征和案例,并且找到資料的獨特之處。你對資料的了解越深刻,你将會更好地讓機器學習模型比對你的學習問題。

了解資料探索的最好方法就是通過例子。在本節中,我們将探索usedcars.csv資料集,它包含在流行的美國網站上最近釋出的關于二手車打折銷售廣告的真實資料。

usedcars.csv資料集能在packt出版社網站的本書支援頁面上下載下傳。如果你要和例子一起操作,一定要確定這個檔案下載下傳且儲存在你的r工作目錄中。

因為資料集存儲為csv形式,是以我們能用read.csv()函數把資料載入r資料框中:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

有了usedcars資料框,現在我們将擔任資料科學家的角色,任務是了解二手車資料。盡管資料探索是一個不确定的過程,但可以把這個步驟想象成一個調查過程,在這個步驟中回答關于資料的問題。具體的問題可能會因任務的不同而有所不同,但問題的類型一般是相似的。不管資料集的大小,你應該能把這個調查的基本步驟應用到任何你感興趣的資料集中。

調查一個新資料集的第一個問題應該是資料是怎麼組織的。如果你足夠幸運,資料源會提供一個資料字典,它是一個描述資料特征的文檔。在我們的例子裡,二手車資料并不包含這個檔案,是以我們需要建立我們自己的資料字典。

函數str()提供了一個顯示資料框、向量和清單這樣的r資料結構的方法。這個函數可以用來建立資料字典的基本輪廓:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料
《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

使用這樣一條簡單的指令,我們就知道了關于資料集的大量資訊。語句150 obs告訴我們資料包含150個觀測值,這是資料包含150個記錄或例子的另一種說法。觀測值的數量一般簡寫為n。因為我們知道資料描述的是二手車,是以現在可以認為供銷售的車有n=150輛。

語句6 variables指的是資料中記錄了6個特征。這些特征根據名稱排列成獨立的行。檢視特征color所在的那一行,我們注意到一些額外的資訊:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

在變量名的後面,chr告訴我們這個特征是字元型的。在這個資料集中,3個變量是字元型,另外3個注明是int,表明是整數型。盡管這個資料集僅包含整數型和字元型,但當使用非整數型資料時,你還可能碰到數值型num。所有因子都列為factor型。在每個變量類型的後面,r給出這個特征的最前面的幾個值。值"yellow"、"gray"、"silver"和"gray"是color特征的前4個值。

根據相關領域知識,特征名稱和特征值可以使我們對變量所代表的含義做出假定。變量year可能指汽車制造的時間,也可能指汽車廣告貼出的時間。接下來我們将更加仔細地調查這個特征,因為這4個案例值(2011 2011 2011 2011)适用于上述任何一個可能性。變量model、price、mileage、color和transmission極有可能指的是銷售汽車的特征。

盡管資料似乎被賦予了有内在含義的變量名,但實際應用中并不是所有的資料都是這樣的。有時候,資料集的特征可能是沒有具體含義的名稱、代号或者像v1這樣的簡單數字。通過進一步調查,确定特征名稱确切代表的含義是必不可少的。然而,即使特征名稱有具體的含義,也要謹慎檢查提供給你的标簽含義的正确性。我們繼續進行下面的分析。

為了調查二手車資料中的數值變量,我們将使用一組普遍使用的描述數值的名額,它們稱為彙總統計量。summary()函數給出了幾個常用的彙總統計量。我們看看二手車資料中的year特征:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

即使你對彙總統計量不熟悉,你也能從summary()函數輸出結果的标題中猜出一些。現在先不管特征year所代表的具體含義,事實上,當我們看到諸如2000、2008以及2009這樣的數字時,我們相信變量year表示汽車制造的時間而不是汽車廣告打出的時間,因為我們知道汽車是最近才挂牌出售的。

我們也能使用summary()函數同時得到多個數值變量的彙總統計量:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

summary()函數提供的6個彙總統計量是探索資料簡單但強大的工具。彙總統計量可以分為兩種類型:資料的中心測度和分散程度測度。

1.測量中心趨勢—平均數和中位數中心趨勢測度是這樣一類統計量,它們用來辨別一組資料的中間值。你應該已經熟悉常用的一個測量中心趨勢的名額—平均數。在一般使用中,當一個數被認為是平均數時,它落在資料的兩個極值之間的某個位置。一個中等學生的成績可能落在他的同學成績的中間;一個平均體重不會是特别重或者特别輕。平均數是具有代表性的,它群組裡的其他值不會差得太多。你可以把它設想成一個所有其他值用來進行參照的值。

在統計學中,平均數也叫作均值,它定義為所有值的總和除以值的個數。例如,要想計算收入分别是$36 000、$44 000和$56 000的3個人的平均收入,我們可以如下計算:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

r也提供一個mean()函數,它能計算數值向量的均值:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

這組人的平均收入是$45 333.33。從概念上來說,你可以想象這個值是,如果所有收入平等分給每一個人,每個人應該得到的收入。

回憶先前的summary()函數的輸出,它列出了變量price和mileage的平均值。price的平均值為12 962,mileage的平均值為44 261,這表明資料集中具有代表性的二手車的價格應該标為$12 962,裡程表的讀數為44 261。這些告訴我們資料的什麼資訊呢?因為平均價格相對偏低,是以可以預料我們資料中包括經濟型汽車。當然,資料中也有可能包括新型的豪華汽車,有着高裡程數,但是相對較低的平均裡程數的統計資料并不提供支援這個假設的證據。另一方面,資料并沒有提供證據讓我們忽略這個可能性。是以,在進一步檢驗資料時我們要留意這一點。

盡管到目前為止,均值是最普遍引用的測量資料集中心的統計量,但它不一定是最合适的。另一個普遍使用的衡量中心趨勢的名額是中位數,它位于有序的值清單的中間。和均值一樣,r提供了函數median()來獲得這個值,可以把它應用到工資資料中,如下所示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

因為中間值是44 000,是以收入的中位數是$44 000。

如果資料集有偶數個值,那麼就沒有最中間值。在這種情況下,一般是計算按順序排列的值清單最中間的兩個值的平均值作為中位數。例如,1,2,3,4的中位數是2.5。

乍一看,好像中位數和均值是很類似的度量。肯定的是,均值$45 333.33和中位數$44 000并沒有太大的差別。為什麼會有這兩種中心趨勢呢?這是由于落在值域兩端的值對均值和中位數的影響是不同的。尤其是均值,它對異常值,或者那些對大多數資料而言異常高或低的值,是非常敏感的。因為均值對異常值是非常敏感的,是以它很容易受到那一小部分極端值的影響而改變大小。

再回憶summary()函數輸出的二手車資料集的中位數。盡管price的均值和中位數非常相似(相差大約5%),但mileage的均值和中位數就非常不同。對于mileage來說,均值44 261比中位數36 385大了超過20%。因為均值比中位數對極端值更敏感,是以均值比中位數大很多這個事實,令我們懷疑資料集中的一些二手車有極高的mileage值。為了進一步調查這一點,我們需要在分析中應用一些額外的彙總統計量。

2.測量資料分散程度—四分位數和五數彙總

測量資料的均值和中位數給我們一個迅速概括資料的方法,但是這些中心測度在數值的大小是否具有多樣性方面給我們提供了很少的資訊。為了測量這種多樣性,我們需要應用另一種彙總統計量,它們是與資料的分散程度相關的,或者說它們是與資料之間“空隙”的緊密或者松弛有關系的。知道了資料之間的差異,就對資料的最大值和最小值有了了解,同時也會對大多數值是否接近均值和中位數有了了解。

五數彙總是一組5個統計量,它們大緻描述一個資料集的差異。所有的5個統計量包含在函數summary()的輸出結果中。按順序排列,它們是:

1)最小值(min.)。

2)第一四分位數,或q1(1st qu.)。

3)中位數,或q2(median)。

4)第三四分位數,或q3(3rd qu.)。

5)最大值(max.)。

如你預期的那樣,最小值和最大值是資料集中能發現的最極端的兩個值,分别表示資料的最小值和最大值。r提供了函數min()和函數max()來分别計算資料向量中的最小值和最大值。

最小值和最大值的內插補點稱為極差。在r中,range()函數同時傳回最小值和最大值。把range()函數和內插補點函數diff()相結合,你能夠用一條指令來檢驗資料的極差:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

第一四分位數和第三四分位數(即q1和q3)指的是有1/4的值小于q1和有1/4的值大于q3。它們和中位數(q2)一起,3個四分位數把一個資料集分成4部分,每一部分都有相同數量的值。

四分位數是分位數的一種特殊類型,分位數把資料分為相等數量的數值。除了四分位數外,普遍使用的分位數包括三分位數(分成3部分)、五分位數(分成5部分)、十分位數(分成10部分)和百分位數(分成100部分)。

百分位數通常用來給資料進行等級評定。例如,一個學生的考試成績排列在百分位數的第99分位數,說明他表現得比其他99%的測試者好。

我們對q1和q3之間的50%的資料特别感興趣,因為它們就是資料分散程度的一個測度。q1和q3之間的差稱為四分位距(inter quartile range,iqr),可以用函數iqr()來計算,例如:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

我們也能從summary()輸出的usedcars$price變量的結果來手動計算這個值,即計算14 904-10 995=3909。我們計算的值與iqr()輸出結果之間有差别,這是因為r自動對summary()輸出結果進行四舍五入。

quantile()函數提供了穩健的工具來給出一組值的分位數。預設情況下,quantile()函數傳回五數彙總的值。把這個函數應用到二手車資料中,将産生與前面一樣的統計量:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

當計算分位數時,有很多種方法處理并列數值和沒有中間值的資料集。通過指定type參數,quantile()函數能夠在9個不同算法之間選擇計算分位數的方法。如果你的項目要求一個精确定義的分位數,使用?quantile指令來閱讀該函數的幫助檔案是很重要的。

如果我們指定另一個probs參數,它用一個向量來表示分割點,我們能就得到任意的分位數,比如第1和第99的百分位數可以按如下方式求得:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

序列函數seq()用來産生由等間距大小的值構成的向量。這個函數使得獲得其他分位數變得很容易,比如要想輸出五分位數(5個組),可以使用如下所示的指令:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

由于了解了五數彙總,是以我們重新檢查對二手車資料應用函數summary()的輸出結果。對變量price,最小值是$3800、最大值是$21 992。有趣的是,最小值和q1之間的差是$7000,與q3和最大值的差是一樣的。然而,q1和中位數的差,以及中位數和q3的差大約是$2000。這就表明上、下25%的值的分布比中間50%的值更分散,似乎中心周圍的值聚集得更加緊密。沒有意外的是,我們從變量mileage也看到了相似的趨勢。在本章後面你将學到,這個分散模式非常普遍,此時稱資料為“正态”分布。

mileage變量的分散程度同時也呈現了另一個有趣的性質:q3和最大值之間的差遠大于最小值和q1之間的差。換句話說,較大的值比較小的值更分散。

這個發現解釋了均值遠大于中位數的原因。因為均值對極端值更敏感,是以均值會被極端大的值拉高,而中位數則相比變化不大。這是一個很重要的性質,當資料可視化地呈現出來時就更顯而易見。

3.數值變量的可視化—箱圖

可視化數值變量對診斷資料問題是有幫助的。一種對五數彙總的常用可視化方式是箱圖(或者稱為箱須圖)。箱圖以一種特定方式顯示數值變量的中心和分散程度,這種方式使你能很快了解變量的值域和偏度,或者它還可以和其他變量進行比較。

下面觀察二手車資料的變量price和變量mileage的箱圖。要想得到一個變量的箱圖,可以使用函數boxplot()。我們也将指定一些其他參數—main和ylab,它們分别為圖形加一個标題和為y軸(即垂直軸)加一個标簽。建立變量price和變量mileage箱圖的指令是:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

r将産生下面的圖形:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

箱圖使用水準線和點來表示五數彙總值。在每個圖的中間,構成盒子的水準線從下向上,依次代表q1、q2(中位數)和q3。中位數用粗黑線表示,對于變量price,這條線在垂直軸上的縱坐标是$13 592;對于變量mileage,這條線的垂直坐标是36 385。

在如上圖所示的簡單箱圖中,箱圖的寬度是任意的,它不能說明任何資料特征。為了滿足更加複雜分析的需要,用盒子的形狀和尺寸,對多組資料進行比較是可能的。要想知道更多關于箱圖的這種特征的資訊,可以通過?boxplot指令,查詢r中boxplot()函數的幫助檔案中的notch和varwidth選項。

最小值和最大值是用細線(whisker)來表示的,就是在盒子下面和上面的細線。然而,通常僅允許細線延伸到最小為低于q1的1.5倍iqr的最小值,或者延伸到最大為高于q3的1.5倍iqr的最大值。任何超出這個臨界值的值都認為是異常值,并且用圓圈或者點來表示。例如,變量price的iqr是3909,q1是10995,q3是14904。是以異常值是任何小于10 995-1.5×3909=5131.5或者大于14 904+1.5×3909=20 767.5的值。

箱圖在高端和低端都會出現這類異常值。在mileage的箱圖中,在低端沒有這樣的異常值,是以底部的細線延伸到最小值4867。在高端,我們看到了幾個比100 000英裡大的異常值。那些異常值就可以解釋我們前面探索中所發現的問題,即解釋了均值遠大于中位數。

4.數值變量可視化—直方圖

直方圖(histogram)是另一種形象化描述數值變量間差異的方式。它和箱圖相似的地方在于,它也把變量值按照預先設定的份數進行分隔,或者說按照預先定義的容納變量值的分段進行分隔。兩者的相似性就是這些。一方面,箱圖要求4部分資料的每部分必須包含相同數量的值,根據需要分段也可以變寬或變窄。另一方面,直方圖可以有相同寬度的任意數量的分段,但是分段可以包含不同數量的值。

可以用函數hist()為二手車資料的變量price和mileage繪制直方圖。就像我們繪制箱圖時那樣,可以用參數main來指定圖形的标題,用參數xlab标記x軸。繪制直方圖的指令如下:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

産生的直方圖如下圖所示。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

直方圖是由一系列的豎條組成,其高度表示落在等長的劃分資料值的分段内的資料值的個數或頻率。分割每一個豎條的垂直線,就像橫坐标的标簽一樣,表明分段内值的起始點和終點。

你可能注意到前面的直方圖中有不同數量的豎條。這是因為hist()函數試圖為給定的變量範圍找出合理數量的豎條。如果你想重寫這裡的預設值,使用參數breaks。設定breaks = 10将建立等寬度的10個豎條,設定參數breaks為一個向量,如c(5000, 10000, 15000, 20000)将以給出的特定值為分隔點來建立豎條。

在變量price的直方圖上,10個豎條中的每一個都表示範圍為$2000的分段,這些分段的範圍是從$2000開始,到$14 000結束。直方圖中間最高的豎條代表的分段範圍為$12 000~$14 000,頻率是50。因為我們知道資料中有150輛汽車,其中1/3汽車的價格是為$12 000~$14 000。接近90輛汽車(超過一半)的報價為$12 000~$16 000。

變量mileage的直方圖包括8個豎條,它表明每個分段長度都是20 000英裡,值域從0開始,到160 000英裡結束。與變量price的直方圖不一樣,在變量mileage的直方圖中,最高的豎條不在資料的中心,而是在直方圖的左側。這個最高豎條所在的分段中有70輛車,裡程表的範圍為20 000~40 000英裡。

你可能也注意到了兩個直方圖的形狀有一點不同。似乎二手車price的圖形趨向于平均分布在中心的兩側,而汽車mileage的圖形則偏到了左側。這個性質稱為偏度(skew),具體來說是右偏,因為與低端的值(右側)相比高端的值(右側)更加分散。如下圖所示,偏斜資料的直方圖看上去偏到了一邊。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

能在資料中快速診斷出這類模式是直方圖作為資料探索工具的優點之一。在我們檢驗其他數值資料模型的模式時,這個優點将更為重要。

5.了解數值資料—均勻分布和正态分布

描述資料的中心和分散程度的直方圖、箱圖和統計量都提供了檢驗變量分布的方法。變量的分布描述了一個值落在不同值域中的可能性大小。

如果所有值都是等可能發生的,這個分布就稱為均勻分布,例如,記錄投擲一個均勻的六邊形骰子所得結果的資料集。容易用直方圖來檢測一個均勻分布,因為其直方圖的豎條大緻有一樣的高度。當用直方圖來可視化資料時,它可能如下圖所示。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

需要注意的重要一點是,并非所有的随機事件都服從均勻分布。例如,擲一個六邊重量不同的魔術骰子,将使得某些數字發生的機率比其他的大。每一次擲骰子會産生一個随機數字,但6個數字出現的機率不相等。

例如,回到前面的二手車資料。很明顯,這個資料不是均勻分布的,因為有些值明顯比其他值發生的可能性更大。事實上,在變量price的直方圖上,可以看出中心值兩邊的值,偏離中心越遠,發生的頻率就越小,這就是一個鐘形的資料分布。這個特征在現實世界的資料中非常普遍,它成為所謂的正态分布的标志性特征。鐘形曲線的典型形狀如下圖所示。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

盡管有許多非正态分布的類型,但許多現象産生的資料都可以用正态分布來描述。是以,正态分布的性質已被研究得很透徹了。

6.測量資料的分散程度—方差和标準差

分布使我們能夠用少量的參數來描述大量值的特性。描述現實生活中大量資料的正态分布,可以用兩個參數來定義:中心和分散程度。正态分布的中心可以用均值來定義,正如我們在前面使用的那樣。分散程度通過一種稱為标準差的統計量來測量。

為了計算标準差,我們必須先獲得方差,方差定義為每一個值與均值之間的差的平方的均值。用數學符号表示,一組具有n個值的變量x的方差可以通過下面的公式定義。希臘字母表示數值的均值,方差用希臘字母的平方來表示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

标準差就是方差的平方根,用來表示,如下所示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

要想在r中獲得方差和标準差,可以應用函數var()和函數sd()。例如,計算變量price與變量mileage的方差與标準差,如下所示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

當我們解釋方差時,方差越大表示資料在均值周圍越分散。标準差表示平均來看每個值與均值相差多少。

如果你用上面的公式手動計算這些統計量,你得出的結果将會與r的内置函數得出的結果略有不同。這是因為上面的公式給出的是總體方差(除以n),而r内置函數用的是樣本方差(除以n-1)。除非資料集很小,否則這兩種結果的差別是很小的。

在假設資料服從正态分布的條件下,标準差能用來快速地估計一個給定值有多大程度的偏大或者偏小。68-95-99.7規則說明在正态分布中68%的值落在均值左右1個标準差的範圍内,而95%和99.7%的值分别落在均值左右2個和3個标準差的範圍内。這個規則可以由下圖來說明。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

把這個知識應用到二手車資料中,我們知道變量price的均值和标準差分别為$12 962和$3122,假設price資料是正态分布,該資料中大約有68%的車的廣告價格為$12 962-$3122=$9840到$12 962+$3122=$16 804。

盡管嚴格地說,68-95-99.7規則僅僅局限于正态分布中,但是這個基本準則能應用到所有的資料中,數值落在均值的3個标準差以外是極端罕見的事件。

我們記得二手車資料集有3個分類變量:model、color和transmission。因為在載入資料時,我們使用了stringsasfactors = false參數,是以r把它們作為字元變量而不是自動把它們轉化成factor類型。此外,我們可能考慮把year看作分類變量。盡管把它作為數值(int)向量載入的,但是每一個year值是一個類别,該類别可以應用到多輛汽車上。

與數值資料相比,分類資料是用表格而不是彙總統計量來探索的。表示單個分類變量的表格稱為一進制表。函數table()能用來産生二手車資料的一進制表:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

table()的輸出列出了名義變量的不同類别和屬于該類别的值的數量。由于我們知道資料集有150個二手車資料,是以我們能确定其中大約有1/3是在2010年制造的,因為49/150=0.327。

r也能在table()函數産生的表格上應用函數prop.table(),直接計算表格比例,如下所示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

函數prop.table()的結果能與其他r函數相結合來轉換輸出的結果。假設我們想要把結果用保留一位小數的百分數來表示,就可以把各個比例值乘以100,再用round()函數并指定digits = 1來實作,如下所示:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

盡管它包含的資訊和prop.table()函數預設的輸出結果一樣,但是相對來說這樣更容易閱讀。結果顯示black(黑色)是最普遍的顔色,因為在廣告列出的所有汽車中将近有1/4(23.3%)是black(黑色)的。silver(銀灰色)與之接近,排在第二位,有21.3%;red(紅色)是第三,有16.7%。

衡量中心趨勢—衆數

在統計術語中,一個特征(即變量)的衆數是指出現最頻繁的那個值。與均值和中位數一樣,衆數是另一個測量中心趨勢的統計量。它通常應用在分類資料中,因為均值和中位數并不是為名義變量定義的。

例如,在二手車資料中,year變量的衆數是2010,而model和color的衆數分别為se和black。一個變量可能有多個衆數;隻有一個衆數的變量是單峰的,有兩個衆數的變量為雙峰的。有多個衆數的資料通常稱為多峰的。

盡管你可能猜測能用mode()函數得到衆數,但是r卻是用這個函數得出變量的類型(如數值型,清單等),而不是統計量衆數。相反,為了找到統計量衆數,隻需要檢視表格輸出結果中具有最大值的類别即可。

衆數是從定性的角度來了解資料集中的重要值。然大多數。例如,盡管black是二手車變量color的衆數,但是black僅占所有列出汽車的1/4。

考慮衆數時最好把它和其他的類别聯系起來。是否有一個類别占主導地位,或者多個類别占主導地位?據此,我們可能會問:最常見的值告訴我們被測量變量的哪些資訊。如果black和silver是最普遍使用的二手車顔色,那麼我們可以假設資料是從奢華汽車中得來的,這類汽車趨向于銷售更加保守的顔色;或者它們也可能是經濟型汽車,這類汽車有更少可供選擇的顔色。在我們進一步檢驗這些資料時,我們要記住這些問題。

把衆數考慮成最普遍的值,使得我們能夠把統計量衆數的概念應用到數值資料。嚴格地說,連續變量是不可能有衆數的,因為沒有兩個值可能是重複的。然而,如果我們把衆數考慮成直方圖中最高的那個豎條,就能夠讨論如變量price和變量mileage的衆數。當探索數值資料時,考慮衆數是很有幫助的,特别要檢驗資料是否為多峰的。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

到目前為止,我們一次隻檢驗一個變量,隻計算單變量統計量。在我們的研究過程中,我們列舉了當時尚不能回答的一些問題:

price資料有沒有暗示我們隻檢驗了經濟類的汽車,還是檢驗的資料中也包括高裡程的奢華汽車呢?

model和color資料之間的關系,提供了關于我們所檢驗的汽車類型的洞察嗎?

這類問題能通過關注二變量關系,即考慮兩個變量之間的關系來進行處理。超過兩個變量之間的關系稱為多變量關系。下面從二變量的情況開始讨論。

1.變量之間關系的可視化—散點圖

散點圖是一種可視化二變量之間關系的圖形。它是一個二維圖形,将點畫在坐标平面中,該坐标平面的橫坐标x是其中一個特征的值,縱坐标y由另一個特征的值來辨別。坐标平面上點的排放模式,揭示了兩個特征之間的内在關系。

為了回答變量price和mileage之間的關系,下面來分析一個散點圖。我們将使用plot()函數以及在前面繪圖中用過的标記圖形的參數main、xlab和ylab。

為了使用plot()函數,我們需要指定x向量和y向量,它們含有圖形中點子位置的值。盡管無論用哪個變量來表示x坐标和y坐标,結論都是一樣的,但是慣例規定,y變量是假定依賴于另一個變量的變量(是以稱為因變量)。因為裡程表的讀數不能被賣家修改,是以它不可能由汽車的價格決定。相反,我們假設price是由裡程表的裡程數(mileage)決定的。是以,我們将把price作為y坐标,或者稱因變量。

繪制散點圖的全部指令如下:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

這将産生下面的散點圖:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

使用散點圖,我們可以了解二手車的價格和裡程表的讀數之間的一個清晰關系。為了研究這張圖,我們觀察當x軸變量的值增加時,y軸變量的值是如何改變的。在這個例子中,當mileage值增加時,price值變得越來越低。如果你曾經賣過或者買過二手車,這一點不難得到。

一個更有趣的發現可能是,除了125 000英裡和$14 000所構成的一個異常點以外,有很少一部分汽車同時有很高的price和很高的mileage。缺少更多這樣的點,就提供了證據來支援下列結論:資料中不可能包含高裡程的奢華汽車。資料中所有貴的汽車,特别是那些$17 500以上的汽車,看上去都有超低的裡程數,這暗示我們可能看到的是一類全新的賣價為$20 000的汽車。

變量price和變量mileage之間的關系是負相關的,因為散點圖是一條向下傾斜的直線。正相關看起來是形成一條向上傾斜的直線。一條水準的線,或者一個看上去随機分布的點集,證明兩個變量完全不相關。兩個變量之間線性關系的強弱是通過統計量相關系數來測量的。相關系數在第6章中詳細讨論,第6章将學習如何使用回歸方法建立線性關系。

注意不是所有的關聯都形成直線。有時,點會形成一個u形或者v形;有時,關聯模式看上去随着x變量或者y變量的增加而變弱或者變強。這樣的模式說明兩個變量之間的關系不是線性的。

2.檢驗變量之間的關系—雙向交叉表

為了檢驗兩個名義變量之間的關系,使用雙向交叉表(two-way cross-tabulation,也稱為交叉表或者列聯表)。交叉表和散點圖相類似,它允許你觀察一個變量的值是如何随着另一個值的變化而變化的。雙向交叉表的格式是:行是一個變量的水準,列是另一個變量的水準。每個表格的單元格中的值用來表明落在特定行、列的單元格中的值的數量。

為了回答我們關于model和color之間關系的問題,我們觀察一個交叉表。r中的多個函數都能生成雙向表,包括table()函數,我們也可以把table()函數用在單向表中。由gregory r. warnes建立的gmodels添加包中的crosstable()函數可能是使用者最喜歡用的函數,因為它在一個表格中提供了行、列和邊際百分比,省去了我們要自己組合這些資料的麻煩。要想安裝gmodels添加包,輸入:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

在安裝了添加包後,僅需要輸入指令library(gmodels)載入該添加包。在每次用到crosstable()函數時,你需要在r系統中載入這個添加包。

在我們繼續分析以前,讓我們通過減少color變量中水準的數量來簡化我們的任務。這個變量有9個水準,但是我們并不是真的需要如此詳細。我們真正感興趣的是汽車的顔色是否是保守的。為此,我們把9種顔色分為兩組:第一組包括保守的顔色:black、gray、silver和white;第二組包括blue、gold、green、red和yellow。我們建立一個二進制訓示變量(常常稱為啞變量),根據我們的定義來表示汽車的顔色是否是保守的。如果是保守的顔色,訓示變量的值就是1,否則值為0。

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

這裡,你可能注意到一個新的指令:%in%運算符,它根據左邊的值是否在右邊的向量中,為運算符左邊向量中的每一個值傳回true或者false。簡單地說,你可以了解為“這輛二手車的顔色是在black、gray、silver和white這組中嗎?”

觀察由table()得到的我們建立變量的輸出結果,我們看到2/3的汽車有保守的顔色,而1/3的汽車沒有保守的顔色:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

現在,讓我們看看交叉表中conservative(保守)顔色汽車的比例是如何随着model變化而變化的。因為我們假設汽車的型号決定了顔色的選擇,是以我們把conservative作為因變量(y)。crosstable()指令的應用如下:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

由此産生了下面的表格:

《機器學習與R語言(原書第2版)》一2.3 探索和了解資料

crosstable()的輸出中包含了大量資料。最上面的一張圖(标示為cell contents)說明如何解釋每一個值。表格的行表示了二手車的3個型号:se、sel和ses(再加上額外的一行用來表示所有型号的彙總)。表格的清單示汽車的顔色是否是保守的(加上額外的一清單示對所有兩種顔色求和)。每個格子中的第一個值表示那個型号和那個顔色的汽車的數量。比例分别表示這個格子的卡方統計量,以及在行、列和整個表格中占的比例。

在表格中,我們最感興趣的是保守顔色汽車占每一種型号的行比例。行比例告訴我們0.654(65%)的se汽車用保守的顔色,sel汽車的這個比例是0.696(70%),ses汽車是0.653(65%)。這些數值的差異相對來說是較小的,這暗示不同型号的汽車選擇的顔色類型沒有顯著的差異。

卡方值指出了在兩個變量中每個單元格在皮爾森卡方獨立性檢驗中的貢獻。這個檢驗測量了表格中每個單元格内數量的不同隻是由于偶然的可能性有多大。如果機率值是非常低的,那麼就提供了充足的證據表明這兩個變量是相關的。

你能在引用crosstable()函數時增加一個額外的參數,指定chisq = true來獲得卡方檢驗的結果。在這個案例中,機率值是93%,暗示單元格内數量的變化很可能僅僅是由于偶然,而不是在model和color之間真的存在關聯。

繼續閱讀