使用sklearn進行數據挖掘-房價預測(3)—繪制數據的分布


使用sklearn進行數據挖掘系列文章:

可視化數據###

目前我們只是大概了解了數據的類型,以及對數據集進行了划分,下面我們要對數據進行更深一步的探索,以下的操作只在訓練集上面進行,由於該數據集比較的小,我們就直接在數據集上面進行操作,為了防止數據集被修改,我們先復制一份。

housing = strat_train_set.copy()

這個數據集提供經緯度這些地理位置信息,那么我們可以根據這些信息將數據分布繪制出來

看着像什么?你沒有猜錯,這就是加利福尼亞州的形狀,這個圖形看着有點稠密,可以通過設置alpha來設置圖形的顯示。

我們對圖像敏感,但要發現圖像中的某些規律還是需要我們調節一下參數的,現在我們就能清楚的從圖中看到稠密的地區了,接下來我們將房價、人口也加入圖中,

import matplotlib.pyplot as plt
housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.4,
    s=housing["population"]/100, label="population", figsize=(10,7),
    c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True,
    sharex=False)
plt.legend()


圖中的小圓圈是代表該區域的人口由參數s控制,顏色代表該區域的房價由參數c控制。
從上面的圖中可以得出一些規律:房價不僅與地理位置有關,還和人口稠密度有關,這些也都是一些常識。
相關性
下面我們看一看各個特征與median_house_value這一特征的相關性,使用的是皮爾遜相關系數Pearson

corr_matrix = housing.corr()
>>print corr_matrix['median_house_value'].sort_values(ascending=False)
median_house_value    1.000000
median_income         0.687160
total_rooms           0.135097
housing_median_age    0.114110
households            0.064506
total_bedrooms        0.047689
population           -0.026920
longitude            -0.047432
latitude             -0.142724
Name: median_house_value, dtype: float64

相關系數的取值范圍為[-1,1],當值趨近1時,表示特征之間具有強的正相關性,反之為負相關。值趨近於0表示特征之間不存在線性關系。值得注意的是,這里說的相關性只針對線性相關。如果為非線性關系則該衡量標准失效,如下圖最后一行,它們的相關系數為0,顯然他們是存在某種關系的。第二行的相關性都為1或-1說明了相關性與斜率無關。

上面是通過計算相關系數矩陣找出特征之間的相關性,還有一種方法是通過繪制特征之間分布,pandas提供了scatter_matrix方法,顧名思義就是使用散點圖形式繪制出特征與特征之間的關系。取出相關系數排名前四的特征作為我們需要繪制的屬性,會得到一個4*4個圖像,代碼如下:

from pandas.tools.plotting import scatter_matrix
attribute = ['median_house_value','median_income','total_rooms','housing_median_age']
scatter_matrix(housing[attribute],figsize=(10,6))

特征的組合###

前面介紹了通過可視化數據的方法來從發現潛在的規律,我們發現了特征之間的關系、還發現了一些特征有着長尾分布,以上發現的這些規律有助於我們對特征進行選擇,或者對數據進行轉化(如取log)等等,還有一個步驟我們可以嘗試使用,那就是特征組合。在這里本文使用了總房間數、家庭人數以及人口數這三個特征的組合。

housing["rooms_per_household"] = housing["total_rooms"]/housing["households"]
housing["bedrooms_per_room"] = housing["total_bedrooms"]/housing["total_rooms"]
housing["population_per_household"]=housing["population"]/housing["households"]

corr_matrix = housing.corr()
print corr_matrix["median_house_value"].sort_values(ascending=False)

相關系數結果:

median_house_value          1.000000
median_income               0.687160
rooms_per_household         0.146285 //
total_rooms                 0.135097
housing_median_age          0.114110
households                  0.064506
total_bedrooms              0.047689
population_per_household   -0.021985//
population                 -0.026920
longitude                  -0.047432
latitude                   -0.142724
bedrooms_per_room          -0.259984//

從上面結果可以看出bedrooms_per_roomtotal_bedrooms 有着更高的相關性,bedrooms/rooms比越小的房價越高,從rooms_per_household可以看出,房子越大房價越貴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM