小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

機器學(xué)習(xí)入門實戰(zhàn)---波士頓房價預(yù)測

 印度阿三17 2020-12-03

波士頓房價預(yù)測

波士頓房價數(shù)據(jù)集介紹
波士頓房價數(shù)據(jù)說明:此數(shù)據(jù)源于美國某經(jīng)濟學(xué)雜志上,分析研究波士頓房價( Boston HousePrice)的數(shù)據(jù)集。數(shù)據(jù)集中的每一行數(shù)據(jù)都是對波士頓周邊或城鎮(zhèn)房價的情況描述。本問題是一個回歸問題。每個類的觀察值數(shù)量是均等的,共有 506 個觀察,13 個輸入變量和1個輸出變量。
數(shù)據(jù)特征:

  1. CRIM: 城鎮(zhèn)人均犯罪率
  2. ZN: 住宅用地所占比例
  3. INDUS: 城鎮(zhèn)中非住宅用地所占比例
  4. CHAS: 虛擬變量,用于回歸分析
  5. NOX: 環(huán)保指數(shù)
  6. RM: 每棟住宅的房間數(shù)
  7. AGE: 1940 年以前建成的自住單位的比例
  8. DIS: 距離 5 個波士頓的就業(yè)中心的加權(quán)距離
  9. RAD: 距離高速公路的便利指數(shù)
  10. TAX: 每一萬美元的不動產(chǎn)稅率
  11. PTRATIO: 城鎮(zhèn)中的教師學(xué)生比例
  12. B: 城鎮(zhèn)中的黑人比例
  13. LSTAT: 地區(qū)中有多少房東屬于低收入人群
  14. MEDV: 自住房屋房價中位數(shù)(也就是均價)

一、加載需要的包

from sklearn.datasets import load_boston
import matplotlib.pyplot as plt
import numpy as np

二、數(shù)據(jù)預(yù)處理

(1)讀入數(shù)據(jù)和觀察數(shù)據(jù) 看看是否需要進行數(shù)據(jù)預(yù)處理。如是否需要 1. 去除唯一屬性;2. 處理缺失值;3. 特征編碼;4. 數(shù)據(jù)標(biāo)準(zhǔn)化、正則化; 5. 特征選擇(降維)

dataset = load_boston()
x_data = dataset.data
y_data = dataset.target
name_data =dataset.feature_names
print(name_data)

輸出結(jié)果:
[‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’
‘B’ ‘LSTAT’]
(2)特征工程-可視化各個特征與房價的關(guān)系

for i in range(13):
    plt.subplot(7,2,i 1) #7行2列第i 1個圖
    plt.scatter(x_data[:,i],y_data,s=10)  #橫縱坐標(biāo)和點的大小
    plt.title(name_data[i])
    plt.show()
    print(name_data[i],np.corrcoef(x_data[:i]),y_data)
    #打印刻畫每個維度特征與房價相關(guān)性的協(xié)方差矩陣

產(chǎn)生如圖所示的結(jié)果
在這里插入圖片描述

查看房價數(shù)據(jù)分布,發(fā)現(xiàn)有一部分?jǐn)?shù)據(jù)等于50,視為異常數(shù)據(jù)

for i in range(len(y_data)):   
    plt.scatter(i,y_data[i],s=10)  #橫縱坐標(biāo)和點的大小

在這里插入圖片描述

(3)、特征工程-處理數(shù)據(jù) 基于散點圖,分析因變量與自變量的相關(guān)性,把不相關(guān)的數(shù)據(jù)剔除。經(jīng)過上面散點圖的分析,可以看到數(shù)據(jù)異常的變量需要特殊處理,根據(jù)散點圖分析,房屋的’RM(每棟住宅的房間數(shù))’,‘LSTAT(地區(qū)中有多少房東屬于低收入人群)’,'PTRATIO(城鎮(zhèn)中的教師學(xué)生比例)’特征與房價的相關(guān)性最大,所以,將其余不相關(guān)特征剔除。

i_=[]
for i in range(len(y_data)):
    if y_data[i] == 50:
        i_.append(i)#存儲房價等于50 的異常值下標(biāo)
x_data = np.delete(x_data,i_,axis=0)                #刪除樣本異常值數(shù)據(jù)
y_data = np.delete(y_data,i_,axis=0)                #刪除標(biāo)簽異常值
name_data = dataset.feature_names
j_=[]
for i in range(13):
    if name_data[i] =='RW'or name_data[i] == 'PTRATIO'or name_data[i] == 'LSTAT'                                               : #提取'RM'、'PTRATIO'、'LSTAT'三個主要特征
        continue
    j_.append(i)#存儲其他次要特征下標(biāo)
x_data = np.delete(x_data,j_,axis=1)#在總特征中刪除次要特征
print(np.shape(y_data))
print(np.shape(x_data))
for i in range(len(y_data)):   
    plt.scatter(i,y_data[i],s=10) 

在這里插入圖片描述
(4)、數(shù)據(jù)分割:數(shù)據(jù)分割為訓(xùn)練集和測試集

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test =train_test_split(x_data,y_data,random_state = 0,test_size = 0.20)
print(len(X_train))
print(len(X_test))
print(len(y_train))
print(len(y_test))

輸出結(jié)果:
392
98
392
98

(5)、數(shù)據(jù)歸一化

from sklearn import preprocessing

min_max_scaler = preprocessing.MinMaxScaler()
X_train = min_max_scaler.fit_transform(X_train)
X_test = min_max_scaler.fit_transform(X_test)

#標(biāo)簽歸一化的目的是什么呢,實驗證明,歸一化之后結(jié)果好了0.1左右
y_train = min_max_scaler.fit_transform(y_train.reshape(-1,1)) #轉(zhuǎn)化為任意行一列
y_test = min_max_scaler.fit_transform(y_test.reshape(-1,1)) #轉(zhuǎn)化為一列

三、模型訓(xùn)練


越接近1效果越好,為0表示與取均值接近,為負(fù)則表示連平均值都不如

1.線性回歸

from sklearn import linear_model
#請完成線性回歸的代碼,生成lr_y_predict作為測試集的預(yù)測結(jié)果
lr = linear_model.LinearRegression() #選擇線性回歸模型
lr.fit(X_train,y_train) #模型的訓(xùn)練
lr_y_predict = lr.predict(X_test) #預(yù)測數(shù)據(jù)
from sklearn.metrics import r2_score
score_lr = r2_score(y_test,lr_y_predict)
score_lr

其中l(wèi)r_y_predict為預(yù)測出的結(jié)果,score_lr表示的為使用測試數(shù)據(jù)查看該模型訓(xùn)練是否較好
結(jié)果:0.6439270371515048
2.嶺回歸

#請完成嶺回歸的代碼,并設(shè)置適當(dāng)?shù)腶lpha參數(shù)值
rr=linear_model.Ridge() #選擇模型嶺回歸
rr.fit(X_train,y_train) #模型的訓(xùn)練
rr_y_predict=rr.predict(X_test)
score_rr = r2_score(y_test,rr_y_predict)
score_rr

結(jié)果:0.6393923188987708
3.lasso

lassr = linear_model.Lasso(alpha=.0001)
lassr.fit(X_train,y_train)
lassr_y_predict=lassr.predict(X_test)

score_lassr = r2_score(y_test,lassr_y_predict)
print(score_lassr)

4.SVR

from sklearn.svm import SVR
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1) #高斯核
svr_lin = SVR(kernel='linear', C=100, gamma='auto') #線性核
svr_poly = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1,
               coef0=1) #徑向基核函數(shù)
svr_rbf_y_predict=svr_rbf.fit(X_train, y_train).predict(X_test)
score_svr_rbf = r2_score(y_test,svr_rbf_y_predict)  
svr_lin_y_predict=svr_lin.fit(X_train, y_train).predict(X_test)
score_svr_lin = r2_score(y_test,svr_lin_y_predict)   
svr_poly_y_predict=svr_poly.fit(X_train, y_train).predict(X_test)
score_svr_poly = r2_score(y_test,svr_poly_y_predict)   
#繪制真實值和預(yù)測值對比圖
def draw_infer_result(groud_truths,infer_results):
    title='Boston'
    plt.title(title, fontsize=24)
    x = np.arange(-0.2,2) 
    y = x
    plt.plot(x, y)
    plt.xlabel('ground truth', fontsize=14)
    plt.ylabel('infer result', fontsize=14)
    plt.scatter(groud_truths, infer_results,color='green',label='training cost') 
    plt.grid()
    plt.show()
draw_infer_result(y_test,lr_y_predict)
draw_infer_result(y_test,rr_y_predict)
draw_infer_result(y_test,lassr_y_predict)
draw_infer_result(y_test,svr_rbf_y_predict)
draw_infer_result(y_test,svr_lin_y_predict)
draw_infer_result(y_test,svr_poly_y_predict)
print("score of lr:",score_lr)
print("score of rr:",score_rr)
print("score of lassr:",score_lassr)
print("score of svr_rbf:",score_svr_rbf)
print("score of svr_lin:",score_svr_lin)
print("score of svr_poly:",score_svr_poly)

在這里插入圖片描述
可以看出效果并不是特別的好。

來源:https://www./content-4-773401.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多