您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Python預測房價走勢”,在日常操作中,相信很多人在怎么用Python預測房價走勢問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python預測房價走勢”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
利用馬薩諸塞州波士頓郊區(qū)的房屋信息數(shù)據(jù)訓練和測試一個模型,并對模型的性能和預測能力進行測試;
數(shù)據(jù)集字段解釋:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術社區(qū)
RM: 住宅平均房間數(shù)量;
LSTAT: 區(qū)域中被認為是低收入階層的比率;
PTRATIO: 鎮(zhèn)上學生與教師數(shù)量比例;
MEDV: 房屋的中值價格(目標特征,即我們要預測的值);
其實現(xiàn)在回過頭來看,前三個特征應該都是挖掘后的組合特征,比如RM,通常在原始數(shù)據(jù)中會分為多個特征:一樓房間、二樓房間、廚房、臥室個數(shù)、地下室房間等等,這里應該是為了教學簡單化了;
MEDV為我們要預測的值,屬于回歸問題,另外數(shù)據(jù)集不大(不到500個數(shù)據(jù)點),小數(shù)據(jù)集上的回歸問題,現(xiàn)在的我初步考慮會用SVM,稍后讓我們看看當時的選擇;
Step 1 導入數(shù)據(jù)
注意點:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術社區(qū)
如果數(shù)據(jù)在多個csv中(比如很多銷售項目中,銷售數(shù)據(jù)和店鋪數(shù)據(jù)是分開兩個csv的,類似數(shù)據(jù)庫的兩張表),這里一般要連接起來;
訓練數(shù)據(jù)和測試數(shù)據(jù)連接起來,這是為了后續(xù)的數(shù)據(jù)處理的一致,否則訓練模型時會有問題(比如用訓練數(shù)據(jù)訓練的模型,預測測試數(shù)據(jù)時報錯維度不一致);
觀察下數(shù)據(jù)量,數(shù)據(jù)量對于后續(xù)選擇算法、可視化方法等有比較大的影響,所以一般會看一下;
pandas內(nèi)存優(yōu)化,這一點項目中目前沒有,但是我最近的項目有用到,簡單說一下,通過對特征字段的數(shù)據(jù)類型向下轉(zhuǎn)換(比如int64轉(zhuǎn)為int8)降低對內(nèi)存的使用,這里很重要,數(shù)據(jù)量大時很容易撐爆個人電腦的內(nèi)存存儲;
上代碼:
# 載入波士頓房屋的數(shù)據(jù)集 data = pd.read_csv('housing.csv') prices = data['MEDV'] features = data.drop('MEDV', axis =1) # 完成 print"Boston housing dataset has {} data points with {} variables each.".format(*data.shape)
Step 2 分析數(shù)據(jù)
加載數(shù)據(jù)后,不要直接就急匆匆的上各種處理手段,加各種模型,先慢一點,對數(shù)據(jù)進行一個初步的了解,了解其各個特征的統(tǒng)計值、分布情況、與目標特征的關系,最好進行可視化,這樣會看到很多意料之外的東西;
基礎統(tǒng)計運算
統(tǒng)計運算用于了解某個特征的整體取值情況,它的最大最小值,平均值中位數(shù),百分位數(shù)等等,這些都是最簡單的對一個字段進行了解的手段;
上代碼:
#目標:計算價值的最小值 minimum_price = np.min(prices)# prices.min #目標:計算價值的最大值 maximum_price = np.max(prices)# prices.max #目標:計算價值的平均值 mean_price = np.mean(prices)# prices.mean #目標:計算價值的中值 median_price = np.median(prices)# prices.median #目標:計算價值的標準差 std_price = np.std(prices)# prices.std
特征觀察
這里主要考慮各個特征與目標之間的關系,比如是正相關還是負相關,通常都是通過對業(yè)務的了解而來的,這里就延伸出一個點,機器學習項目通常來說,對業(yè)務越了解,越容易得到好的效果,因為所謂的特征工程其實就是理解業(yè)務、深挖業(yè)務的過程;
比如這個問題中的三個特征:
RM:房間個數(shù)明顯應該是與房價正相關的;
LSTAT:低收入比例一定程度上表示著這個社區(qū)的級別,因此應該是負相關;
PTRATIO:學生/教師比例越高,說明教育資源越緊缺,也應該是負相關;
上述這三個點,同樣可以通過可視化的方式來驗證,事實上也應該去驗證而不是只靠主觀猜想,有些情況下,主觀感覺與客觀事實是完全相反的,這里要注意;
Step 3 數(shù)據(jù)劃分
為了驗證模型的好壞,通常的做法是進行cv,即交叉驗證,基本思路是將數(shù)據(jù)平均劃分N塊,取其中N-1塊訓練,并對另外1塊做預測,并比對預測結果與實際結果,這個過程反復N次直到每一塊都作為驗證數(shù)據(jù)使用過;
上代碼:
# 提示:導入train_test_split fromsklearn.model_selectionimporttrain_test_split X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=RANDOM_STATE) printX_train.shape printX_test.shape printy_train.shape printy_test.shape
Step 4 定義評價函數(shù)
這里主要是根據(jù)問題來定義,比如分類問題用的最多的是準確率(精確率、召回率也有使用,具體看業(yè)務場景中更重視什么),回歸問題用RMSE(均方誤差)等等,實際項目中根據(jù)業(yè)務特點經(jīng)常會有需要去自定義評價函數(shù)的時候,這里就比較靈活;
Step 5 模型調(diào)優(yōu)
通過GridSearch對模型參數(shù)進行網(wǎng)格組合搜索最優(yōu),注意這里要考慮數(shù)據(jù)量以及組合后的可能個數(shù),避免運行時間過長哈。
上代碼:
fromsklearn.model_selectionimportKFold,GridSearchCV fromsklearn.treeimportDecisionTreeRegressor fromsklearn.metricsimportmake_scorer deffit_model(X, y): """ 基于輸入數(shù)據(jù) [X,y],利于網(wǎng)格搜索找到最優(yōu)的決策樹模型""" cross_validator = KFold regressor = DecisionTreeRegressor params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]} scoring_fnc = make_scorer(performance_metric) grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cross_validator) # 基于輸入數(shù)據(jù) [X,y],進行網(wǎng)格搜索 grid = grid.fit(X, y) # 返回網(wǎng)格搜索后的最優(yōu)模型 returngrid.best_estimator_
可以看到當時項目中選擇的是決策樹模型,現(xiàn)在看,樹模型在這種小數(shù)據(jù)集上其實是比較容易過擬合的,因此可以考慮用SVM代替,你也可以試試哈,我估計是SVM效果比較好;
學習曲線
通過繪制分析學習曲線,可以對模型當前狀態(tài)有一個基本了解,如下圖:
可以看到,超參數(shù)max_depth為1和3時,明顯訓練分數(shù)過低,這說明此時模型有欠擬合的情況,而當max_depth為6和10時,明顯訓練分數(shù)和驗證分析差距過大,說明出現(xiàn)了過擬合,因此我們初步可以猜測,優(yōu)質(zhì)參數(shù)在3和6之間,即4,5中的一個,其他參數(shù)一樣可以通過學習曲線來進行可視化分析,判斷是欠擬合還是過擬合,再分別進行針對處理;
到此,關于“怎么用Python預測房價走勢”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。