怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)

這篇文章主要介紹“怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)”,在日常操作中,相信很多人在怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、九臺(tái)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

項(xiàng)目描述

利用馬薩諸塞州波士頓郊區(qū)的房屋信息數(shù)據(jù)訓(xùn)練和測(cè)試一個(gè)模型,并對(duì)模型的性能和預(yù)測(cè)能力進(jìn)行測(cè)試;

項(xiàng)目分析

數(shù)據(jù)集字段解釋?zhuān)?/p>

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. RM: 住宅平均房間數(shù)量;

  3. LSTAT: 區(qū)域中被認(rèn)為是低收入階層的比率;

  4. PTRATIO: 鎮(zhèn)上學(xué)生與教師數(shù)量比例;

  5. MEDV: 房屋的中值價(jià)格(目標(biāo)特征,即我們要預(yù)測(cè)的值);

其實(shí)現(xiàn)在回過(guò)頭來(lái)看,前三個(gè)特征應(yīng)該都是挖掘后的組合特征,比如RM,通常在原始數(shù)據(jù)中會(huì)分為多個(gè)特征:一樓房間、二樓房間、廚房、臥室個(gè)數(shù)、地下室房間等等,這里應(yīng)該是為了教學(xué)簡(jiǎn)單化了;

MEDV為我們要預(yù)測(cè)的值,屬于回歸問(wèn)題,另外數(shù)據(jù)集不大(不到500個(gè)數(shù)據(jù)點(diǎn)),小數(shù)據(jù)集上的回歸問(wèn)題,現(xiàn)在的我初步考慮會(huì)用SVM,稍后讓我們看看當(dāng)時(shí)的選擇;

Show Time

Step 1 導(dǎo)入數(shù)據(jù)

注意點(diǎn):

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 如果數(shù)據(jù)在多個(gè)csv中(比如很多銷(xiāo)售項(xiàng)目中,銷(xiāo)售數(shù)據(jù)和店鋪數(shù)據(jù)是分開(kāi)兩個(gè)csv的,類(lèi)似數(shù)據(jù)庫(kù)的兩張表),這里一般要連接起來(lái);

  3. 訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)連接起來(lái),這是為了后續(xù)的數(shù)據(jù)處理的一致,否則訓(xùn)練模型時(shí)會(huì)有問(wèn)題(比如用訓(xùn)練數(shù)據(jù)訓(xùn)練的模型,預(yù)測(cè)測(cè)試數(shù)據(jù)時(shí)報(bào)錯(cuò)維度不一致);

  4. 觀察下數(shù)據(jù)量,數(shù)據(jù)量對(duì)于后續(xù)選擇算法、可視化方法等有比較大的影響,所以一般會(huì)看一下;

  5. pandas內(nèi)存優(yōu)化,這一點(diǎn)項(xiàng)目中目前沒(méi)有,但是我最近的項(xiàng)目有用到,簡(jiǎn)單說(shuō)一下,通過(guò)對(duì)特征字段的數(shù)據(jù)類(lèi)型向下轉(zhuǎn)換(比如int64轉(zhuǎn)為int8)降低對(duì)內(nèi)存的使用,這里很重要,數(shù)據(jù)量大時(shí)很容易撐爆個(gè)人電腦的內(nèi)存存儲(chǔ);

上代碼:

# 載入波士頓房屋的數(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ù)后,不要直接就急匆匆的上各種處理手段,加各種模型,先慢一點(diǎn),對(duì)數(shù)據(jù)進(jìn)行一個(gè)初步的了解,了解其各個(gè)特征的統(tǒng)計(jì)值、分布情況、與目標(biāo)特征的關(guān)系,最好進(jìn)行可視化,這樣會(huì)看到很多意料之外的東西;

基礎(chǔ)統(tǒng)計(jì)運(yùn)算

統(tǒng)計(jì)運(yùn)算用于了解某個(gè)特征的整體取值情況,它的最大最小值,平均值中位數(shù),百分位數(shù)等等,這些都是最簡(jiǎn)單的對(duì)一個(gè)字段進(jìn)行了解的手段;

上代碼:

#目標(biāo):計(jì)算價(jià)值的最小值  minimum_price = np.min(prices)# prices.min   #目標(biāo):計(jì)算價(jià)值的最大值  maximum_price = np.max(prices)# prices.max   #目標(biāo):計(jì)算價(jià)值的平均值  mean_price = np.mean(prices)# prices.mean   #目標(biāo):計(jì)算價(jià)值的中值  median_price = np.median(prices)# prices.median   #目標(biāo):計(jì)算價(jià)值的標(biāo)準(zhǔn)差  std_price = np.std(prices)# prices.std

特征觀察

這里主要考慮各個(gè)特征與目標(biāo)之間的關(guān)系,比如是正相關(guān)還是負(fù)相關(guān),通常都是通過(guò)對(duì)業(yè)務(wù)的了解而來(lái)的,這里就延伸出一個(gè)點(diǎn),機(jī)器學(xué)習(xí)項(xiàng)目通常來(lái)說(shuō),對(duì)業(yè)務(wù)越了解,越容易得到好的效果,因?yàn)樗^的特征工程其實(shí)就是理解業(yè)務(wù)、深挖業(yè)務(wù)的過(guò)程;

比如這個(gè)問(wèn)題中的三個(gè)特征:

  • RM:房間個(gè)數(shù)明顯應(yīng)該是與房?jī)r(jià)正相關(guān)的;

  • LSTAT:低收入比例一定程度上表示著這個(gè)社區(qū)的級(jí)別,因此應(yīng)該是負(fù)相關(guān);

  • PTRATIO:學(xué)生/教師比例越高,說(shuō)明教育資源越緊缺,也應(yīng)該是負(fù)相關(guān);

上述這三個(gè)點(diǎn),同樣可以通過(guò)可視化的方式來(lái)驗(yàn)證,事實(shí)上也應(yīng)該去驗(yàn)證而不是只靠主觀猜想,有些情況下,主觀感覺(jué)與客觀事實(shí)是完全相反的,這里要注意;

Step 3 數(shù)據(jù)劃分

為了驗(yàn)證模型的好壞,通常的做法是進(jìn)行cv,即交叉驗(yàn)證,基本思路是將數(shù)據(jù)平均劃分N塊,取其中N-1塊訓(xùn)練,并對(duì)另外1塊做預(yù)測(cè),并比對(duì)預(yù)測(cè)結(jié)果與實(shí)際結(jié)果,這個(gè)過(guò)程反復(fù)N次直到每一塊都作為驗(yàn)證數(shù)據(jù)使用過(guò);

上代碼:

# 提示:導(dǎo)入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 定義評(píng)價(jià)函數(shù)

這里主要是根據(jù)問(wèn)題來(lái)定義,比如分類(lèi)問(wèn)題用的最多的是準(zhǔn)確率(精確率、召回率也有使用,具體看業(yè)務(wù)場(chǎng)景中更重視什么),回歸問(wèn)題用RMSE(均方誤差)等等,實(shí)際項(xiàng)目中根據(jù)業(yè)務(wù)特點(diǎn)經(jīng)常會(huì)有需要去自定義評(píng)價(jià)函數(shù)的時(shí)候,這里就比較靈活;

Step 5 模型調(diào)優(yōu)

通過(guò)GridSearch對(duì)模型參數(shù)進(jìn)行網(wǎng)格組合搜索最優(yōu),注意這里要考慮數(shù)據(jù)量以及組合后的可能個(gè)數(shù),避免運(yùn)行時(shí)間過(guò)長(zhǎng)哈。

上代碼:

fromsklearn.model_selectionimportKFold,GridSearchCV  fromsklearn.treeimportDecisionTreeRegressor  fromsklearn.metricsimportmake_scorer    deffit_model(X, y):  """ 基于輸入數(shù)據(jù) [X,y],利于網(wǎng)格搜索找到最優(yōu)的決策樹(shù)模型"""   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],進(jìn)行網(wǎng)格搜索  grid = grid.fit(X, y)   # 返回網(wǎng)格搜索后的最優(yōu)模型  returngrid.best_estimator_

可以看到當(dāng)時(shí)項(xiàng)目中選擇的是決策樹(shù)模型,現(xiàn)在看,樹(shù)模型在這種小數(shù)據(jù)集上其實(shí)是比較容易過(guò)擬合的,因此可以考慮用SVM代替,你也可以試試哈,我估計(jì)是SVM效果比較好;

學(xué)習(xí)曲線(xiàn)

通過(guò)繪制分析學(xué)習(xí)曲線(xiàn),可以對(duì)模型當(dāng)前狀態(tài)有一個(gè)基本了解,如下圖:

怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)

可以看到,超參數(shù)max_depth為1和3時(shí),明顯訓(xùn)練分?jǐn)?shù)過(guò)低,這說(shuō)明此時(shí)模型有欠擬合的情況,而當(dāng)max_depth為6和10時(shí),明顯訓(xùn)練分?jǐn)?shù)和驗(yàn)證分析差距過(guò)大,說(shuō)明出現(xiàn)了過(guò)擬合,因此我們初步可以猜測(cè),優(yōu)質(zhì)參數(shù)在3和6之間,即4,5中的一個(gè),其他參數(shù)一樣可以通過(guò)學(xué)習(xí)曲線(xiàn)來(lái)進(jìn)行可視化分析,判斷是欠擬合還是過(guò)擬合,再分別進(jìn)行針對(duì)處理;

到此,關(guān)于“怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

新聞名稱(chēng):怎么用Python預(yù)測(cè)房?jī)r(jià)走勢(shì)
本文鏈接:http://muchs.cn/article16/pihedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化、軟件開(kāi)發(fā)網(wǎng)站內(nèi)鏈、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司