python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
在前面的博客已經介紹過多元回歸模型,現在這里粗略介紹如下
python 實現案例
1、選取數據
執行代碼#!usr/bin/env?python#_*_?coding:utf-8?_*_import?pandas?as?pdimport?seaborn?as?snsimport?matplotlib.pyplot?as?pltimport?matplotlib?as?mpl???#顯示中文def?mul_lr():
pd_data=pd.read_excel('C:\\Users\\lenovo\\Desktop\\test.xlsx')
print('pd_data.head(10)=\n{}'.format(pd_data.head(10)))
mpl.rcParams['font.sans-serif']?=?['SimHei']??#配置顯示中文,否則亂碼mpl.rcParams['axes.unicode_minus']=False?#用來正常顯示負號,如果是plt畫圖,則將mlp換成pltsns.pairplot(pd_data,?x_vars=['中證500','瀘深300','上證50','上證180'],?y_vars='上證指數',kind="reg",?size=5,?aspect=0.7)
plt.show()#注意必須加上這一句,否則無法顯示。
添加參數kind=”reg”結果,關于畫圖方面可[參考連接]
#####2、構建訓練集與測試級,并構建模型from?sklearn.model_selection?import?train_test_split?#這里是引用了交叉驗證from?sklearn.linear_model?import?LinearRegression??#線性回歸from?sklearn?import?metricsimport?numpy?as?npimport?matplotlib.pyplot?as?pltdef?mul_lr():???#續前面代碼
#剔除日期數據,一般沒有這列可不執行,選取以下數據http://blog.csdn.net/chixujohnny/article/details/51095817
X=pd_data.loc[:,('中證500','瀘深300','上證50','上證180')]
y=pd_data.loc[:,'上證指數']
X_train,X_test,?y_train,?y_test?=?train_test_split(X,y,test_size?=?0.2,random_state=100)????print?('X_train.shape={}\n?y_train.shape?={}\n?X_test.shape={}\n,??y_test.shape={}'.format(X_train.shape,y_train.shape,?X_test.shape,y_test.shape))
linreg?=?LinearRegression()
model=linreg.fit(X_train,?y_train)????print?(model)????#?訓練后模型截距
print?(linreg.intercept_)????#?訓練后模型權重(特征個數無變化)
print?(linreg.coef_)
feature_cols?=?['中證500','瀘深300','上證50','上證180','上證指數']
B=list(zip(feature_cols,linreg.coef_))????print(B)
3、模型預測#預測
y_pred?=?linreg.predict(X_test)????print?(y_pred)?#10個變量的預測結果
4、模型評估#評價
#(1)?評價測度
#?對于分類問題,評價測度是準確率,但這種方法不適用于回歸問題。我們使用針對連續數值的評價測度(evaluation?metrics)。
#?這里介紹3種常用的針對線性回歸的測度。
#?1)平均絕對誤差(Mean?Absolute?Error,?MAE)
#?(2)均方誤差(Mean?Squared?Error,?MSE)
#?(3)均方根誤差(Root?Mean?Squared?Error,?RMSE)
#?這里我使用RMES。
sum_mean=0
for?i?in?range(len(y_pred)):
sum_mean+=(y_pred[i]-y_test.values[i])**2
sum_erro=np.sqrt(sum_mean/10)??#這個10是你測試級的數量
#?calculate?RMSE?by?hand
print?("RMSE?by?hand:",sum_erro)????#做ROC曲線
plt.figure()
plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
plt.plot(range(len(y_pred)),y_test,'r',label="test")
plt.legend(loc="upper?right")?#顯示圖中的標簽
plt.xlabel("the?number?of?sales")
plt.ylabel('value?of?sales')
plt.show()
附錄:
相應的參數說明。
fit_intercept: 布爾型,默認為true
說明:是否對訓練數據進行中心化。如果該變量為false,則表明輸入的數據已經進行了中心化,在下面的過程里不進行中心化處理;否則,對輸入的訓練數據進行中心化處理
normalize布爾型,默認為false
說明:是否對數據進行標準化處理
copy_X 布爾型,默認為true
說明:是否對X復制,如果選擇false,則直接對原數據進行覆蓋。(即經過中心化,標準化后,是否把新數據覆蓋到原數據上)
**n_jobs整型, 默認為1
說明:計算時設置的任務個數(number of jobs)。如果選擇-1則代表使用所有的CPU。這一參數的對于目標個數>1(n_targets>1)且足夠大規模的問題有加速作用。
返回值:
coef_ ?數組型變量, 形狀為(n_features,)或(n_targets, n_features)
說明:對于線性回歸問題計算得到的feature的系數。如果輸入的是多目標問題,則返回一個二維數組(n_targets, n_features);如果是單目標問題,返回一個一維數組 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (n_features,)。
intercept_ ? ? ? ?數組型變量
說明:線性模型中的獨立項。
注:該算法僅僅是scipy.linalg.lstsq經過封裝后的估計器。
方法:
decision_function(X) ?對訓練數據X進行預測
fit(X, y[, n_jobs]) ? ? ? ? ? ? ? ? ? ? 對訓練集X, y進行訓練。是對scipy.linalg.lstsq的封裝
get_params([deep]) 得到該估計器(estimator)的參數。
predict(X) 使用訓練得到的估計器對輸入為X的集合進行預測(X可以是測試集,也可以是需要預測的數據)。
score(X, y[,]sample_weight) ? 返回對于以X為samples,以y為target的預測效果評分。
set_params(**params) ? ? ? ? ? ?設置估計器的參數
decision_function(X) 和predict(X)都是利用預估器對訓練數據X進行預測,其中decision_function(X)包含了對輸入數據的類型檢查,以及當前對象是否存在coef_屬性的檢查,是一種“安全的”方法,而predict是對decision_function的調用。
score(X, y[,]sample_weight) ? ?定義為(1-u/v),其中u = ((y_true - y_pred)**2).sum(),而v=((y_true-y_true.mean())**2).mean()
最好的得分為1.0,一般的得分都比1.0低,得分越低代表結果越差。
其中sample_weight為(samples_n,)形狀的向量,可以指定對于某些sample的權值,如果覺得某些數據比較重要,可以將其的權值設置的大一些。
例子:from?sklearn?import?linear_model
clf?=?linear_model.LinearRegression()
clf.fit?([[0,?0],?[1,?1],?[2,?2]],?[0,?1,?2])
LinearRegression(copy_X=True,?fit_intercept=True,?n_jobs=1,?normalize=False)
clf.coef_
array([?0.5,??0.5])
總結
以上是生活随笔為你收集整理的python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数调用键盘热键_神技能:P
- 下一篇: python编写函数_浅谈Python