我對本書中的代碼做了詳盡的註釋,放到了我的github,star我哦(✪ω✪)
Q:端到端(end to end)
end-to-end(端對端)的方法,一端輸入我的原始數據,一端輸出我想得到的結果。只關心輸入和輸出,中間的步驟全部都不管。轉自TopCoderの陳澤澤
Q:對收入中位數進行縮放,分類
你或許會這麼想,書中爲什麼要將收入中位數進行分類呢?
書中把所有的數據除以1.5,並將大於5的歸於5,其實是在將收入中位數進行分類,然後根據每一類來進行分層抽樣,保證每一類別在驗證集中都佔有同樣的比例。那麼爲什麼不直接進行分類,而是要除以1.5呢?我分先畫個圖看看收入的分佈:
圖中我們可以看到,數據是不是大多集中2-6,如果我們要分類的話得分類別(2,3,4,5,6),因爲要保證每一個類別都需要有足夠多的實例,實例少的就歸到其他類。作者希望訓練的分類從1開始,因此作者把數據都除以1.5,這樣也就可以分類爲(1,2,3,4,5)了。所有這些對數據的操作只是爲了切分訓練集與驗證集,切分完了之後會將這些分類數據刪掉,並不會同原始數據一起訓練,所以對訓練的結果不會產生影響。
Q:繪製點圖
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)
DataFrame.plot()講解:pandas.DataFrame.plot其實是集成了matplotlib的多個繪圖函數。本例中kind="scatter"
就相當與是matlotlib的scatter函數。傳入的參數也就是scatter函數的參數。
x,y
:x座標和y座標
alpha
:透明度
s
:Size首字母。s可以設置點圖中每一個點的大小,s是每個點的大小的一個集合。x,y決定點的順序,對應着s集合中的順序。也就是說第i個(x,y)座標對應的點的大小就是s[i]。當點數超過s集合的大小時,又重新從s[0]開始。在本例中,s取的是人口的數量,每個座標點的大小剛好對應該點人口數,直接取原始數據畫出的點太大,通過除以100來限制點的大小。weixin_39462002這篇博客值得一看。
c
:Color首字母。同s類似,c是點的顏色的序列(x,y)[i]也與c[i]對應。可以自定義顏色序列如[‘b’,‘r’],b:blue,r:red。在本例中沒有使用自定義的顏色序列這種方法,而是使用了另一種方法,即c爲一個數字序列,然後使用matplotlib自帶的colormap來對這個數字序列根據數字大小對應顏色,見下一參數。
cmap
:Colormap。如上方所說,可以使用matplotlib的colormap來作爲繪圖的顏色序列。這裏使用的是‘jet’,所有的colormap見這裏。
如圖所示是名爲‘jet’的colormap,本例中c=“median_house_value”,即選取房價中位數作爲數字序列,數字越大的顏色越紅,即畫出的圖表中,越紅的點房價越高。colorbar
:是否顯示顏色條,即上圖右方顏色條,即jet。
sharex=False
:這句用來修復一個圖表顯示的bug(x軸的值和圖例顯示不出來)