python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
在前面的博客已經(jīng)介紹過多元回歸模型,現(xiàn)在這里粗略介紹如下
python 實(shí)現(xiàn)案例
1、選取數(shù)據(jù)
執(zhí)行代碼#!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?#用來正常顯示負(fù)號(hào),如果是plt畫圖,則將mlp換成pltsns.pairplot(pd_data,?x_vars=['中證500','瀘深300','上證50','上證180'],?y_vars='上證指數(shù)',kind="reg",?size=5,?aspect=0.7)
plt.show()#注意必須加上這一句,否則無法顯示。
添加參數(shù)kind=”reg”結(jié)果,關(guān)于畫圖方面可[參考連接]
#####2、構(gòu)建訓(xùn)練集與測(cè)試級(jí),并構(gòu)建模型from?sklearn.model_selection?import?train_test_split?#這里是引用了交叉驗(yàn)證from?sklearn.linear_model?import?LinearRegression??#線性回歸from?sklearn?import?metricsimport?numpy?as?npimport?matplotlib.pyplot?as?pltdef?mul_lr():???#續(xù)前面代碼
#剔除日期數(shù)據(jù),一般沒有這列可不執(zhí)行,選取以下數(shù)據(jù)http://blog.csdn.net/chixujohnny/article/details/51095817
X=pd_data.loc[:,('中證500','瀘深300','上證50','上證180')]
y=pd_data.loc[:,'上證指數(shù)']
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)????#?訓(xùn)練后模型截距
print?(linreg.intercept_)????#?訓(xùn)練后模型權(quán)重(特征個(gè)數(shù)無變化)
print?(linreg.coef_)
feature_cols?=?['中證500','瀘深300','上證50','上證180','上證指數(shù)']
B=list(zip(feature_cols,linreg.coef_))????print(B)
3、模型預(yù)測(cè)#預(yù)測(cè)
y_pred?=?linreg.predict(X_test)????print?(y_pred)?#10個(gè)變量的預(yù)測(cè)結(jié)果
4、模型評(píng)估#評(píng)價(jià)
#(1)?評(píng)價(jià)測(cè)度
#?對(duì)于分類問題,評(píng)價(jià)測(cè)度是準(zhǔn)確率,但這種方法不適用于回歸問題。我們使用針對(duì)連續(xù)數(shù)值的評(píng)價(jià)測(cè)度(evaluation?metrics)。
#?這里介紹3種常用的針對(duì)線性回歸的測(cè)度。
#?1)平均絕對(duì)誤差(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)??#這個(gè)10是你測(cè)試級(jí)的數(shù)量
#?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")?#顯示圖中的標(biāo)簽
plt.xlabel("the?number?of?sales")
plt.ylabel('value?of?sales')
plt.show()
附錄:
相應(yīng)的參數(shù)說明。
fit_intercept: 布爾型,默認(rèn)為true
說明:是否對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行中心化。如果該變量為false,則表明輸入的數(shù)據(jù)已經(jīng)進(jìn)行了中心化,在下面的過程里不進(jìn)行中心化處理;否則,對(duì)輸入的訓(xùn)練數(shù)據(jù)進(jìn)行中心化處理
normalize布爾型,默認(rèn)為false
說明:是否對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理
copy_X 布爾型,默認(rèn)為true
說明:是否對(duì)X復(fù)制,如果選擇false,則直接對(duì)原數(shù)據(jù)進(jìn)行覆蓋。(即經(jīng)過中心化,標(biāo)準(zhǔn)化后,是否把新數(shù)據(jù)覆蓋到原數(shù)據(jù)上)
**n_jobs整型, 默認(rèn)為1
說明:計(jì)算時(shí)設(shè)置的任務(wù)個(gè)數(shù)(number of jobs)。如果選擇-1則代表使用所有的CPU。這一參數(shù)的對(duì)于目標(biāo)個(gè)數(shù)>1(n_targets>1)且足夠大規(guī)模的問題有加速作用。
返回值:
coef_ ?數(shù)組型變量, 形狀為(n_features,)或(n_targets, n_features)
說明:對(duì)于線性回歸問題計(jì)算得到的feature的系數(shù)。如果輸入的是多目標(biāo)問題,則返回一個(gè)二維數(shù)組(n_targets, n_features);如果是單目標(biāo)問題,返回一個(gè)一維數(shù)組 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (n_features,)。
intercept_ ? ? ? ?數(shù)組型變量
說明:線性模型中的獨(dú)立項(xiàng)。
注:該算法僅僅是scipy.linalg.lstsq經(jīng)過封裝后的估計(jì)器。
方法:
decision_function(X) ?對(duì)訓(xùn)練數(shù)據(jù)X進(jìn)行預(yù)測(cè)
fit(X, y[, n_jobs]) ? ? ? ? ? ? ? ? ? ? 對(duì)訓(xùn)練集X, y進(jìn)行訓(xùn)練。是對(duì)scipy.linalg.lstsq的封裝
get_params([deep]) 得到該估計(jì)器(estimator)的參數(shù)。
predict(X) 使用訓(xùn)練得到的估計(jì)器對(duì)輸入為X的集合進(jìn)行預(yù)測(cè)(X可以是測(cè)試集,也可以是需要預(yù)測(cè)的數(shù)據(jù))。
score(X, y[,]sample_weight) ? 返回對(duì)于以X為samples,以y為target的預(yù)測(cè)效果評(píng)分。
set_params(**params) ? ? ? ? ? ?設(shè)置估計(jì)器的參數(shù)
decision_function(X) 和predict(X)都是利用預(yù)估器對(duì)訓(xùn)練數(shù)據(jù)X進(jìn)行預(yù)測(cè),其中decision_function(X)包含了對(duì)輸入數(shù)據(jù)的類型檢查,以及當(dāng)前對(duì)象是否存在coef_屬性的檢查,是一種“安全的”方法,而predict是對(duì)decision_function的調(diào)用。
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低,得分越低代表結(jié)果越差。
其中sample_weight為(samples_n,)形狀的向量,可以指定對(duì)于某些sample的權(quán)值,如果覺得某些數(shù)據(jù)比較重要,可以將其的權(quán)值設(shè)置的大一些。
例子: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])
總結(jié)
以上是生活随笔為你收集整理的python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数调用键盘热键_神技能:P
- 下一篇: python编写函数_浅谈Python