Zillow房價預測系列:Kmeans聚類地理信息並可視化
利用K-Means演算法對Zillow競賽數據的經緯度地理信息進行聚類,並將聚類結果進行可視化。
Kaggle舉辦了很多次房價預測相關的比賽。在房價預測比賽中都會有涉及到地理位置的特徵,比如:最基本的經緯度(longitude、latitude),還包括地區編碼、郵編等。
地理位置對房價的重要性想必大家都是知道的,對一套相同條件的房子來說,位於北京和昆明的可謂天壤之別。因此需要我們花費大量的時間和精力來處理這些特徵。
一、地理位置特徵處理方法
看到地理位置信息,首先就會想到聚類,一個簡單的方式將每個房子劃分到同一塊區域中去;除了聚類以外,通過算出幾個中心點坐標,計算曼哈頓距離或者歐式距離可能都會有神奇的效果。
二、Zillow地理信息可視化實戰分析
我最近在刷Zillow,所以就以Zillow數據集為例,介紹地理信息聚類方法。
第一步,我們把地理信息先可視化出來,看看效果。
import numpy as npnimport pandas as pdnimport matplotlib.pyplot as pltnimport seaborn as snsnnfrom sklearn.cluster import KMeansnnproperties = pd.read_csv(../input/properties_2017.csv)nn# make geo_dfngeo_df = properties[[parcelid,latitude, longitude]]ngeo_df[longitude] = geo_df[longitude] / 1e6ngeo_df[latitude] = geo_df[latitude] / 1e6nnx = np.array(geo_df[latitude])ny = np.array(geo_df[longitude])nnfig = plt.figure(figsize=(16, 12))nplt.scatter(x, y, alpha=0.5)nplt.show()n
第二步,利用KMeans演算法進行聚類,並可視化聚類效果。
kmeans = KMeans(n_clusters=10).fit(geo_df[[latitude, longitude]])ngeo_df[cluster_n] = kmeans.labels_nnfig = plt.figure(figsize=(16, 12))nx = np.array(geo_df[latitude])ny = np.array(geo_df[longitude])nncolors = [b, g, r, c, m, y, k, aqua, brown, darkblue]n#print colornfor i,c in enumerate(geo_df[cluster_n][:500]):n plt.scatter(x[i], y[i], c=colors[c], alpha=0.5)nplt.show()n
可視化結果,將地理信息聚類為10類並用不同的顏色來表示,在地圖上的位置相對是比較集中的,具體代表的含義需要我們下來深挖。這裡只是提供一個想法。
結束語
地理信息對房價來說真的非常非常非常重要,僅僅是簡單的聚類完全沒有將特徵的價值發揮出來,需要再嘗試不斷的用其他方法來處理。還有很多更加深入的處理方法,我們可以參考在之前的比賽中其他優秀獲獎選手的處理思路,改進我們的處理方法,畢竟模仿也是學習最快的手段。
歡迎關注個人微信公眾號:「kaggle數據分析」,分享kaggle比賽的經驗和方法。
推薦閱讀:
※用TensorFlow做Kaggle「手寫識別」達到98%準確率-詳解
※Kaggle求生:亞馬遜熱帶雨林篇
※Kaggle入門系列:(二)Kaggle簡介
※2016 CCF大數據與計算智能大賽的開源資料整理