基于线性回归的波士顿房价预测
生活随笔
收集整理的這篇文章主要介紹了
基于线性回归的波士顿房价预测
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
折線圖代碼?
#-*-coding:utf-8-*- import pandas as pd import numpy as np import matplotlib.pyplot as plt #加載數(shù)據(jù) from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression#正規(guī)方程求解的線性回歸 from sklearn.linear_model import SGDRegressor#sgd線性回歸,隨機(jī)梯度下降線性回歸 from sklearn.linear_model import Ridge#嶺回歸算法 #默認(rèn)不支持中文,需要配置RC參數(shù) plt.rcParams['font.sans-serif']='SimHei' #設(shè)置字體之后不支持,需要去設(shè)置RC參數(shù)更改編碼 plt.rcParams['axes.unicode_minus']=False def show_res(y_test,y_predict):"""結(jié)果展示:param x_test: 測(cè)試集目標(biāo)值的真實(shí)值:param y_predict: 預(yù)測(cè)值:return: None"""#1、畫布plt.figure()#2、繪圖折線圖x=np.arange(0,len(y_test))plt.plot(x, y_test, marker='*')plt.plot(x,y_predict,marker='o')#增加標(biāo)題plt.title('房?jī)r(jià)預(yù)測(cè)與真實(shí)值的走勢(shì)')#坐標(biāo)軸plt.xlabel('x軸')plt.ylabel('房?jī)r(jià)')#圖例plt.legend(['真實(shí)值','預(yù)測(cè)值'])#3、展示plt.show() #函數(shù)自帶數(shù)據(jù) boston=load_boston() print(boston) #獲取tezhengzhi feature=boston['data'] feature_names=boston['feature_names'] target=boston['target'] #將波士頓房?jī)r(jià)數(shù)據(jù)保存到本地 #將特征值轉(zhuǎn)化為DF # df_feature=pd.DataFrame(feature,columns=feature_names) # #將目標(biāo)值轉(zhuǎn)化為df # df_target=pd.DataFrame(target,columns=['MEDV']) # #將特征值df與目標(biāo)值df拼接,在進(jìn)行保存 # df_data=pd.concat((df_feature,df_target),axis=1) # df_data.to_excel('./boston.xlsx',index=False) #拆分?jǐn)?shù)據(jù)集-拆分成訓(xùn)練集與測(cè)試集,特征值與目標(biāo)值 #測(cè)試集占比test_size=0.3 #返回值--先特征值(先訓(xùn)練集,在測(cè)試集),在目標(biāo)值(先訓(xùn)練集,在測(cè)試集) #random_state=1(True)固定拆分,準(zhǔn)確率不同是因?yàn)椴鸱謹(jǐn)?shù)據(jù)的隨機(jī)性 x_train,x_test,y_train,y_test=train_test_split(feature,target,test_size=0.3,random_state=1) print(x_train,x_test,y_train,y_test) #檢測(cè)缺失值--沒(méi)有缺失值 #檢測(cè)異常值--沒(méi)有異常值 #目標(biāo)值不需要標(biāo)準(zhǔn)化,特征值需要標(biāo)準(zhǔn)化 stand=StandardScaler() #先計(jì)算均值與標(biāo)準(zhǔn)差,在進(jìn)行轉(zhuǎn)化 # x_train=stand.fit_transform(x_train) # x_test=stand.fit_transform(x_test) stand.fit(x_train)#計(jì)算指標(biāo) x_train=stand.fit_transform(x_train) x_test=stand.fit_transform(x_test) #正規(guī)方程進(jìn)行求解的線性回歸-適用于特征數(shù)據(jù)較少的數(shù)據(jù) #進(jìn)行構(gòu)建模型--線性模型-- lr=LinearRegression() #訓(xùn)練數(shù)據(jù) lr.fit(x_train,y_train) #預(yù)測(cè)數(shù)據(jù) y_predict=lr.predict(x_test) print(y_predict) #計(jì)算準(zhǔn)確率 score=lr.score(x_test,y_test)#sgd=SGDRegressor()#適用于特征較多,數(shù)據(jù)量較大的情況 #默認(rèn)的學(xué)習(xí)率為0.01 #如果想要更改學(xué)習(xí)率-- # 1、learning_rate='constant' #2、eta0=學(xué)習(xí)率 #梯度方向--不需要考慮--沿著損失減少的方向 #學(xué)習(xí)率如何設(shè)置,設(shè)置合適的大小,(0.1,0.01,0.001) #學(xué)習(xí)率過(guò)大會(huì)造成梯度爆炸(很少出現(xiàn)),經(jīng)常出現(xiàn)在復(fù)雜神經(jīng)網(wǎng)絡(luò)中- #梯度爆炸-》損失、準(zhǔn)確率,全變成NAN類型 #學(xué)習(xí)率過(guò)小,會(huì)造成原地打轉(zhuǎn),梯度消失--損失不減少 #進(jìn)行自我學(xué)習(xí)修正的過(guò)程 #訓(xùn)練數(shù)據(jù) # sgd.fit(x_train,y_train) # #預(yù)測(cè)數(shù)據(jù) # y_predict=sgd.predict(x_test) # print(y_predict) # #計(jì)算準(zhǔn)確率 # score=sgd.score(x_test,y_test) # #獲取權(quán)重與偏置 # weight=sgd.coef_ # bias=sgd.intercept_ #Ridge()線性回歸+L2正則化--在小的數(shù)據(jù)集上,效果會(huì)比LinearRegression準(zhǔn)確 #L2正則化將權(quán)重降為接近0,或者刪除無(wú)效的特征值 rd=Ridge() #訓(xùn)練數(shù)據(jù) rd.fit(x_train,y_train) #預(yù)測(cè)數(shù)據(jù) y_predict=rd.predict(x_test) print(y_predict) #計(jì)算準(zhǔn)確率 score=rd.score(x_test,y_test) print(score) #獲取權(quán)重與偏置 # weight=rd.coef_ # bias=rd.intercept_ # print(weight,bias,score) # #繪圖展示 show_res(y_test,y_predict)?
散點(diǎn)圖和曲線圖結(jié)合并且排序優(yōu)化?
#-*-coding:utf-8-*- import pandas as pd import numpy as np import matplotlib.pyplot as plt #加載數(shù)據(jù) from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression#正規(guī)方程求解的線性回歸 from sklearn.linear_model import SGDRegressor#sgd線性回歸,隨機(jī)梯度下降線性回歸 from sklearn.linear_model import Ridge#嶺回歸算法 #默認(rèn)不支持中文,需要配置RC參數(shù) plt.rcParams['font.sans-serif']='SimHei' #設(shè)置字體之后不支持,需要去設(shè)置RC參數(shù)更改編碼 plt.rcParams['axes.unicode_minus']=False def show_res(y_test,y_predict):"""結(jié)果展示:param x_test: 測(cè)試集目標(biāo)值的真實(shí)值:param y_predict: 預(yù)測(cè)值:return: None"""#1、畫布plt.figure()#2、繪圖折線圖x=np.arange(0,len(y_test))res=np.argsort(y_predict)# 以列表推導(dǎo)式的形式來(lái)獲取x 按照z 排序規(guī)則進(jìn)行排序之后的結(jié)果y_test= [y_test[i] for i in res]y_predict.sort(axis=0)#排序不能用原變量命名print(2,type(y_predict))plt.scatter(x, y_test, s=60, c='red', marker='.', alpha=1)plt.plot(x, y_predict, c='green')#plt.plot(x,y_predict)#增加標(biāo)題plt.title('房?jī)r(jià)預(yù)測(cè)與真實(shí)值的走勢(shì)')#坐標(biāo)軸plt.xlabel('x軸')plt.ylabel('房?jī)r(jià)')#圖例plt.legend(['真實(shí)值','預(yù)測(cè)值'])#3、展示plt.show() #函數(shù)自帶數(shù)據(jù) boston=load_boston() print(boston) #獲取tezhengzhi feature=boston['data'] feature_names=boston['feature_names'] target=boston['target'] #將波士頓房?jī)r(jià)數(shù)據(jù)保存到本地 #將特征值轉(zhuǎn)化為DF # df_feature=pd.DataFrame(feature,columns=feature_names) # #將目標(biāo)值轉(zhuǎn)化為df # df_target=pd.DataFrame(target,columns=['MEDV']) # #將特征值df與目標(biāo)值df拼接,在進(jìn)行保存 # df_data=pd.concat((df_feature,df_target),axis=1) # df_data.to_excel('./boston.xlsx',index=False) #拆分?jǐn)?shù)據(jù)集-拆分成訓(xùn)練集與測(cè)試集,特征值與目標(biāo)值 #測(cè)試集占比test_size=0.3 #返回值--先特征值(先訓(xùn)練集,在測(cè)試集),在目標(biāo)值(先訓(xùn)練集,在測(cè)試集) #random_state=1(True)固定拆分,準(zhǔn)確率不同是因?yàn)椴鸱謹(jǐn)?shù)據(jù)的隨機(jī)性 x_train,x_test,y_train,y_test=train_test_split(feature,target,test_size=0.3,random_state=1) print(x_train,x_test,y_train,y_test) #檢測(cè)缺失值--沒(méi)有缺失值 #檢測(cè)異常值--沒(méi)有異常值 #目標(biāo)值不需要標(biāo)準(zhǔn)化,特征值需要標(biāo)準(zhǔn)化 stand=StandardScaler() #先計(jì)算均值與標(biāo)準(zhǔn)差,在進(jìn)行轉(zhuǎn)化 # x_train=stand.fit_transform(x_train) # x_test=stand.fit_transform(x_test) stand.fit(x_train)#計(jì)算指標(biāo) x_train=stand.fit_transform(x_train) x_test=stand.fit_transform(x_test) #正規(guī)方程進(jìn)行求解的線性回歸-適用于特征數(shù)據(jù)較少的數(shù)據(jù) #進(jìn)行構(gòu)建模型--線性模型-- lr=LinearRegression() #訓(xùn)練數(shù)據(jù) lr.fit(x_train,y_train) #預(yù)測(cè)數(shù)據(jù) y_predict=lr.predict(x_test) print(y_predict) #計(jì)算準(zhǔn)確率 score=lr.score(x_test,y_test)#sgd=SGDRegressor()#適用于特征較多,數(shù)據(jù)量較大的情況 #默認(rèn)的學(xué)習(xí)率為0.01 #如果想要更改學(xué)習(xí)率-- # 1、learning_rate='constant' #2、eta0=學(xué)習(xí)率 #梯度方向--不需要考慮--沿著損失減少的方向 #學(xué)習(xí)率如何設(shè)置,設(shè)置合適的大小,(0.1,0.01,0.001) #學(xué)習(xí)率過(guò)大會(huì)造成梯度爆炸(很少出現(xiàn)),經(jīng)常出現(xiàn)在復(fù)雜神經(jīng)網(wǎng)絡(luò)中- #梯度爆炸-》損失、準(zhǔn)確率,全變成NAN類型 #學(xué)習(xí)率過(guò)小,會(huì)造成原地打轉(zhuǎn),梯度消失--損失不減少 #進(jìn)行自我學(xué)習(xí)修正的過(guò)程 #訓(xùn)練數(shù)據(jù) # sgd.fit(x_train,y_train) # #預(yù)測(cè)數(shù)據(jù) # y_predict=sgd.predict(x_test) # print(y_predict) # #計(jì)算準(zhǔn)確率 # score=sgd.score(x_test,y_test) # #獲取權(quán)重與偏置 # weight=sgd.coef_ # bias=sgd.intercept_ #Ridge()線性回歸+L2正則化--在小的數(shù)據(jù)集上,效果會(huì)比LinearRegression準(zhǔn)確 #L2正則化將權(quán)重降為接近0,或者刪除無(wú)效的特征值 rd=Ridge() #訓(xùn)練數(shù)據(jù) rd.fit(x_train,y_train) #預(yù)測(cè)數(shù)據(jù) y_predict=rd.predict(x_test) print(y_predict) #計(jì)算準(zhǔn)確率 score=rd.score(x_test,y_test) print(score) #獲取權(quán)重與偏置 # weight=rd.coef_ # bias=rd.intercept_ # print(weight,bias,score) # #繪圖展示 show_res(y_test,y_predict)總結(jié)
以上是生活随笔為你收集整理的基于线性回归的波士顿房价预测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据分析Python:sklearn数据
- 下一篇: 深度学习tensorflow数据流图基础