回歸預(yù)測(cè)分析python數(shù)據(jù)化運(yùn)營(yíng)線性回歸總結(jié)
內(nèi)容介紹
以 Python 使用 線性回歸 簡(jiǎn)單舉例應(yīng)用介紹回歸分析。
線性回歸是利用線性的方法,模擬因變量與一個(gè)或多個(gè)自變量之間的關(guān)系;
對(duì)于模型而言,自變量是輸入值,因變量是模型基于自變量的輸出值,適用于x和y滿足線性關(guān)系的數(shù)據(jù)類(lèi)型的應(yīng)用場(chǎng)景。
用于預(yù)測(cè)輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時(shí),輸出變量的值也隨之發(fā)生變化。
回歸模型正是表示從輸入變量到輸出變量之間映射的函數(shù)。
線性回歸幾乎是最簡(jiǎn)單的模型了,它假設(shè)因變量和自變量之間是線性關(guān)系的,一條直線簡(jiǎn)單明了。
一般應(yīng)用場(chǎng)景
連續(xù)性數(shù)據(jù)的預(yù)測(cè):例如房?jī)r(jià)預(yù)測(cè)、銷(xiāo)售額度預(yù)測(cè)、貸款額度預(yù)測(cè)。
簡(jiǎn)單來(lái)說(shuō)就是用歷史的連續(xù)數(shù)據(jù)去預(yù)測(cè)未來(lái)的某個(gè)數(shù)值。
線性回歸的常用方法
最小二乘法、貝葉斯嶺回歸、彈性網(wǎng)絡(luò)回歸、支持向量機(jī)回歸、支持向量機(jī)回歸等。
線性回歸實(shí)現(xiàn)
import numpy as np # numpy庫(kù) from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet,Lasso # 批量導(dǎo)入要實(shí)現(xiàn)的回歸算法 from sklearn.svm import SVR # SVM中的回歸算法 from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor # 集成算法 from sklearn.model_selection import cross_val_score # 交叉檢驗(yàn) from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score # 批量導(dǎo)入指標(biāo)算法 import pandas as pd # 導(dǎo)入pandas import matplotlib.pyplot as plt # 導(dǎo)入圖形展示庫(kù) import random # 隨機(jī)生成100組包含5組特征的數(shù)據(jù) feature = [[random.random(),random.random(),random.random(),random.random(),random.random()] for i in range(100)] dependent = [round(random.uniform(1,100),2) for i in range(100)] # 訓(xùn)練回歸模型 n_folds = 6 # 設(shè)置交叉檢驗(yàn)的次數(shù) model_br = BayesianRidge() # 建立貝葉斯嶺回歸模型對(duì)象 model_lr = LinearRegression() # 建立普通線性回歸模型對(duì)象 model_etc = ElasticNet() # 建立彈性網(wǎng)絡(luò)回歸模型對(duì)象 model_svr = SVR() # 建立支持向量機(jī)回歸模型對(duì)象 model_la = Lasso() # 建立支持向量機(jī)回歸模型對(duì)象 model_gbr = GradientBoostingRegressor() # 建立梯度增強(qiáng)回歸模型對(duì)象 model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'Lasso','GBR'] # 不同模型的名稱列表 model_dic = [model_br, model_lr, model_etc, model_svr,model_la, model_gbr] # 不同回歸模型對(duì)象的集合 cv_score_list = [] # 交叉檢驗(yàn)結(jié)果列表 pre_y_list = [] # 各個(gè)回歸模型預(yù)測(cè)的y值列表 for model in model_dic: # 讀出每個(gè)回歸模型對(duì)象 scores = cross_val_score(model, feature, dependent, cv=n_folds) # 將每個(gè)回歸模型導(dǎo)入交叉檢驗(yàn)?zāi)P椭凶鲇?xùn)練檢驗(yàn) cv_score_list.append(scores) # 將交叉檢驗(yàn)結(jié)果存入結(jié)果列表 pre_y_list.append(model.fit(feature, dependent).predict(feature)) # 將回歸訓(xùn)練中得到的預(yù)測(cè)y存入列表
線性回歸評(píng)估指標(biāo)
model_gbr:
擬合貝葉斯嶺模型,以及正則化參數(shù)lambda(權(quán)重的精度)和alpha(噪聲的精度)的優(yōu)化。
model_lr:
線性回歸擬合系數(shù)w=(w1,…)的線性模型,wp)將觀測(cè)到的目標(biāo)與線性近似預(yù)測(cè)的目標(biāo)之間的殘差平方和降到最小。
model_etc:
以L1和L2先驗(yàn)組合為正則元的線性回歸。
model_svr:
線性支持向量回歸。
model_la:
用L1先驗(yàn)作為正則化器(又稱Lasso)訓(xùn)練的線性模型
# 模型效果指標(biāo)評(píng)估 model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score] # 回歸評(píng)估指標(biāo)對(duì)象集 model_metrics_list = [] # 回歸評(píng)估指標(biāo)列表 for i in range(6): # 循環(huán)每個(gè)模型索引 tmp_list = [] # 每個(gè)內(nèi)循環(huán)的臨時(shí)結(jié)果列表 for m in model_metrics_name: # 循環(huán)每個(gè)指標(biāo)對(duì)象 tmp_score = m(dependent, pre_y_list[i]) # 計(jì)算每個(gè)回歸指標(biāo)結(jié)果 tmp_list.append(tmp_score) # 將結(jié)果存入每個(gè)內(nèi)循環(huán)的臨時(shí)結(jié)果列表 model_metrics_list.append(tmp_list) # 將結(jié)果存入回歸評(píng)估指標(biāo)列表 df1 = pd.DataFrame(cv_score_list, index=model_names) # 建立交叉檢驗(yàn)的數(shù)據(jù)框 df2 = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2']) # 建立回歸指標(biāo)的數(shù)據(jù)框
線性回歸效果可視化
# 模型效果可視化 plt.figure() # 創(chuàng)建畫(huà)布 plt.plot(np.arange(len(feature)), dependent, color='k', label='true y') # 畫(huà)出原始值的曲線 color_list = ['r', 'b', 'g', 'y', 'p','c'] # 顏色列表 linestyle_list = ['-', '.', 'o', 'v',':', '*'] # 樣式列表 for i, pre_y in enumerate(pre_y_list): # 讀出通過(guò)回歸模型預(yù)測(cè)得到的索引及結(jié)果 plt.plot(np.arange(len(feature)), pre_y_list[i], color_list[i], label=model_names[i]) # 畫(huà)出每條預(yù)測(cè)結(jié)果線 plt.title('regression result comparison') # 標(biāo)題 plt.legend(loc='upper right') # 圖例位置 plt.ylabel('real and predicted value') # y軸標(biāo)題 plt.show() # 展示圖像
數(shù)據(jù)預(yù)測(cè)
# 模型應(yīng)用 new_point_set = [[random.random(),random.random(),random.random(),random.random(),random.random()], [random.random(),random.random(),random.random(),random.random(),random.random()], [random.random(),random.random(),random.random(),random.random(),random.random()], [random.random(),random.random(),random.random(),random.random(),random.random()]] # 要預(yù)測(cè)的新數(shù)據(jù)集 print("貝葉斯嶺回歸模型預(yù)測(cè)結(jié)果:") for i, new_point in enumerate(new_point_set): # 循環(huán)讀出每個(gè)要預(yù)測(cè)的數(shù)據(jù)點(diǎn) new_pre_y = model_gbr.predict(np.array(new_point).reshape(1,-1)) print ('預(yù)測(cè)隨機(jī)數(shù)值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)信息 print (50 * '-') print("普通線性回歸模型預(yù)測(cè)結(jié)果:") for i, new_point in enumerate(new_point_set): # 循環(huán)讀出每個(gè)要預(yù)測(cè)的數(shù)據(jù)點(diǎn) new_pre_y = model_lr.predict(np.array(new_point).reshape(1,-1)) print ('預(yù)測(cè)隨機(jī)數(shù)值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)信息 print (50 * '-') print("彈性網(wǎng)絡(luò)回歸模型預(yù)測(cè)結(jié)果:") for i, new_point in enumerate(new_point_set): # 循環(huán)讀出每個(gè)要預(yù)測(cè)的數(shù)據(jù)點(diǎn) new_pre_y = model_etc.predict(np.array(new_point).reshape(1,-1)) print ('預(yù)測(cè)隨機(jī)數(shù)值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)信息 print (50 * '-') print("支持向量機(jī)回歸模型預(yù)測(cè)結(jié)果:") for i, new_point in enumerate(new_point_set): # 循環(huán)讀出每個(gè)要預(yù)測(cè)的數(shù)據(jù)點(diǎn) new_pre_y = model_svr.predict(np.array(new_point).reshape(1,-1)) print ('預(yù)測(cè)隨機(jī)數(shù)值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)信息 print (50 * '-') print("拉索回歸模型預(yù)測(cè)結(jié)果:") for i, new_point in enumerate(new_point_set): # 循環(huán)讀出每個(gè)要預(yù)測(cè)的數(shù)據(jù)點(diǎn) new_pre_y = model_la.predict(np.array(new_point).reshape(1,-1)) print ('預(yù)測(cè)隨機(jī)數(shù)值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個(gè)數(shù)據(jù)點(diǎn)的預(yù)測(cè)信息
以上就是回歸預(yù)測(cè)分析python數(shù)據(jù)化運(yùn)營(yíng)線性回歸總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于python數(shù)據(jù)化運(yùn)營(yíng)線性回歸的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 語(yǔ)法錯(cuò)誤:"SyntaxError: invalid charac
本文給大家分享Python 語(yǔ)法錯(cuò)誤:“SyntaxError: invalid character in identifier“,原因及解決方法,文末給大家補(bǔ)充介紹了Python出現(xiàn)SyntaxError: invalid syntax的原因總結(jié),感興趣的朋友跟隨小編一起學(xué)習(xí)吧2023-02-02如何利用Python寫(xiě)猜數(shù)字和字母的游戲
這篇文章主要介紹了如何利用Python寫(xiě)猜數(shù)字和字母的游戲,文章基于Python實(shí)現(xiàn)游戲小項(xiàng)目,感興趣的朋友可以參考一下2022-07-07Python實(shí)現(xiàn)生成密碼字典的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)生成密碼字典的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python密碼字典的實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),涉及字符串運(yùn)算、文件讀寫(xiě)等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09python pandas中索引函數(shù)loc和iloc的區(qū)別分析
在數(shù)據(jù)分析過(guò)程中,很多時(shí)候我們需要從數(shù)據(jù)表中提取出我們需要的部分,而這么做的前提是我們需要先索引出這一部分?jǐn)?shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python pandas中索引函數(shù)loc和iloc區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-09-09python在命令行中使用?pdb?實(shí)現(xiàn)斷點(diǎn)調(diào)試功能
在命令行中設(shè)置斷點(diǎn)通常需要使用調(diào)試工具來(lái)實(shí)現(xiàn),下面以 Python 為例介紹如何在命令行中使用pdb實(shí)現(xiàn)斷點(diǎn)調(diào)試,這篇文章主要介紹了python在命令行中使用pdb實(shí)現(xiàn)斷點(diǎn)調(diào)試,需要的朋友可以參考下2023-06-06