欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 實(shí)例進(jìn)階之預(yù)測(cè)房?jī)r(jià)走勢(shì)

 更新時(shí)間:2021年11月03日 16:27:05   作者:Python學(xué)習(xí)與數(shù)據(jù)挖掘  
買房應(yīng)該是大多數(shù)都會(huì)要面臨的一個(gè)選擇,當(dāng)前經(jīng)濟(jì)和政策背景下,未來房?jī)r(jià)會(huì)漲還是跌?這是很多人都關(guān)心的一個(gè)話題。今天分享的這篇文章,以波士頓的房地產(chǎn)市場(chǎng)為例,根據(jù)低收入人群比例、老師學(xué)生數(shù)量等特征,利用 Python 進(jìn)行了預(yù)測(cè),給大家做一個(gè)參考

該分享源于 Udacity 機(jī)器學(xué)習(xí)進(jìn)階中的一個(gè)mini作業(yè)項(xiàng)目,用于入門非常合適,刨除了繁瑣的部分,保留了最關(guān)鍵、基本的步驟,能夠?qū)C(jī)器學(xué)習(xí)基本流程有一個(gè)最清晰的認(rèn)識(shí)。歡迎收藏學(xué)習(xí),喜歡點(diǎn)贊支持,文末提供技術(shù)交流群。

項(xiàng)目描述

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

項(xiàng)目分析

數(shù)據(jù)集字段解釋:

  • RM: 住宅平均房間數(shù)量;
  • LSTAT: 區(qū)域中被認(rèn)為是低收入階層的比率;
  • PTRATIO: 鎮(zhèn)上學(xué)生與教師數(shù)量比例;
  • MEDV: 房屋的中值價(jià)格(目標(biāo)特征,即我們要預(yù)測(cè)的值);

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

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

Show Time

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

注意點(diǎn):

  • 如果數(shù)據(jù)在多個(gè)csv中(比如很多銷售項(xiàng)目中,銷售數(shù)據(jù)和店鋪數(shù)據(jù)是分開兩個(gè)csv的,類似數(shù)據(jù)庫(kù)的兩張表),這里一般要連接起來;
  • 訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)連接起來,這是為了后續(xù)的數(shù)據(jù)處理的一致,否則訓(xùn)練模型時(shí)會(huì)有問題(比如用訓(xùn)練數(shù)據(jù)訓(xùn)練的模型,預(yù)測(cè)測(cè)試數(shù)據(jù)時(shí)報(bào)錯(cuò)維度不一致);
  • 觀察下數(shù)據(jù)量,數(shù)據(jù)量對(duì)于后續(xù)選擇算法、可視化方法等有比較大的影響,所以一般會(huì)看一下;
  • pandas內(nèi)存優(yōu)化,這一點(diǎn)項(xiàng)目中目前沒有,但是我最近的項(xiàng)目有用到,簡(jiǎn)單說一下,通過對(duì)特征字段的數(shù)據(jù)類型向下轉(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),通常都是通過對(duì)業(yè)務(wù)的了解而來的,這里就延伸出一個(gè)點(diǎn),機(jī)器學(xué)習(xí)項(xiàng)目通常來說,對(duì)業(yè)務(wù)越了解,越容易得到好的效果,因?yàn)樗^的特征工程其實(shí)就是理解業(yè)務(wù)、深挖業(yè)務(wù)的過程;

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

  • RM:房間個(gè)數(shù)明顯應(yīng)該是與房?jī)r(jià)正相關(guān)的;
  • LSTAT:低收入比例一定程度上表示著這個(gè)社區(qū)的級(jí)別,因此應(yīng)該是負(fù)相關(guān);
  • PTRATIO:學(xué)生/教師比例越高,說明教育資源越緊缺,也應(yīng)該是負(fù)相關(guān);

上述這三個(gè)點(diǎn),同樣可以通過可視化的方式來驗(yàn)證,事實(shí)上也應(yīng)該去驗(yàn)證而不是只靠主觀猜想,有些情況下,主觀感覺與客觀事實(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è)過程反復(fù)N次直到每一塊都作為驗(yàn)證數(shù)據(jù)使用過;

上代碼:

# 提示:導(dǎo)入train_test_split
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=RANDOM_STATE)
print X_train.shape
print X_test.shape
print y_train.shape
print y_test.shape

Step 4 定義評(píng)價(jià)函數(shù)

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

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

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

上代碼:

from sklearn.model_selection importKFold,GridSearchCV
from sklearn.tree importDecisionTreeRegressor
from sklearn.metrics import make_scorer


def fit_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],進(jìn)行網(wǎng)格搜索
    grid = grid.fit(X, y)

# 返回網(wǎng)格搜索后的最優(yōu)模型
return grid.best_estimator_

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

學(xué)習(xí)曲線

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

圖片

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

小結(jié)

通過以上的幾步,可以非常簡(jiǎn)單、清晰的看到一個(gè)機(jī)器學(xué)習(xí)項(xiàng)目的全流程,其實(shí)再?gòu)?fù)雜的流程也是這些簡(jiǎn)單步驟的一些擴(kuò)展,而更難的往往是對(duì)業(yè)務(wù)的理解,沒有足夠的理解很難得到好的結(jié)果,體現(xiàn)出來就是特征工程部分做的好壞,這里就需要各位小伙伴們奮發(fā)圖強(qiáng)了,路漫漫啊。

技術(shù)交流

歡迎轉(zhuǎn)載、收藏、有所收獲點(diǎn)贊支持一下!

在這里插入圖片描述

到此這篇關(guān)于Python 實(shí)例進(jìn)階之預(yù)測(cè)房?jī)r(jià)走勢(shì)的文章就介紹到這了,更多相關(guān)Python 預(yù)測(cè)房?jī)r(jià)走勢(shì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用BeautifulSoup4解析XML的方法小結(jié)

    使用BeautifulSoup4解析XML的方法小結(jié)

    這篇文章主要介紹了使用BeautifulSoup4解析XML的方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python中shutil模塊的學(xué)習(xí)筆記教程

    Python中shutil模塊的學(xué)習(xí)筆記教程

    shutil模塊是一種高層次的文件操作工具,類似于高級(jí)API,主要強(qiáng)大之處在于其對(duì)文件的復(fù)制與刪除操作更是比較支持好。下面這篇文章主要介紹了Python中shutil模塊的相關(guān)教程,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-04-04
  • 詳解Python requests模塊

    詳解Python requests模塊

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著Python requests模塊展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python MySQL數(shù)據(jù)庫(kù)基本操作及項(xiàng)目示例詳解

    Python MySQL數(shù)據(jù)庫(kù)基本操作及項(xiàng)目示例詳解

    這篇文章主要介紹了Python連接MySQL數(shù)據(jù)庫(kù)后的一些基本操作,并以銀行管理系統(tǒng)項(xiàng)目為例,為大家具體介紹了一下部分功能的實(shí)現(xiàn),文中的示例代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2021-12-12
  • Python實(shí)現(xiàn)的計(jì)算器功能示例

    Python實(shí)現(xiàn)的計(jì)算器功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的計(jì)算器功能,涉及Python四則運(yùn)算、取反、百分比等相關(guān)數(shù)學(xué)運(yùn)算操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-04-04
  • python 怎樣進(jìn)行內(nèi)存管理

    python 怎樣進(jìn)行內(nèi)存管理

    這篇文章主要介紹了python 是如何進(jìn)行內(nèi)存管理的,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • Python實(shí)現(xiàn)計(jì)算AUC的三種方式總結(jié)

    Python實(shí)現(xiàn)計(jì)算AUC的三種方式總結(jié)

    AUC(Area?under?curve)是機(jī)器學(xué)習(xí)常用的二分類評(píng)測(cè)手段,直接含義是ROC曲線下的面積。本文總結(jié)了Python語言實(shí)現(xiàn)計(jì)算AUC的三種方式,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • Python中常用的內(nèi)置方法

    Python中常用的內(nèi)置方法

    今天小編就為大家分享一篇關(guān)于Python中常用的內(nèi)置方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 一個(gè)簡(jiǎn)單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息

    一個(gè)簡(jiǎn)單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息

    這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)單的python爬蟲程序,爬取豆瓣熱度Top100以內(nèi)的電影信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python Django 實(shí)現(xiàn)簡(jiǎn)單注冊(cè)功能過程詳解

    Python Django 實(shí)現(xiàn)簡(jiǎn)單注冊(cè)功能過程詳解

    這篇文章主要介紹了Python Django 實(shí)現(xiàn)簡(jiǎn)單注冊(cè)功能過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論