這篇文章主要介紹了python中如何使用線性回歸,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
以 Python 使用 線性回歸 簡單舉例應用介紹回歸分析。
線性回歸是利用線性的方法,模擬因變量與一個或多個自變量之間的關系;
對于模型而言,自變量是輸入值,因變量是模型基于自變量的輸出值,適用于x和y滿足線性關系的數據類型的應用場景。
用于預測輸入變量和輸出變量之間的關系,特別是當輸入變量的值發生變化時,輸出變量的值也隨之發生變化。
回歸模型正是表示從輸入變量到輸出變量之間映射的函數。
線性回歸幾乎是最簡單的模型了,它假設因變量和自變量之間是線性關系的,一條直線簡單明了。
連續性數據的預測:例如房價預測、銷售額度預測、貸款額度預測。
簡單來說就是用歷史的連續數據去預測未來的某個數值。
最小二乘法、貝葉斯嶺回歸、彈性網絡回歸、支持向量機回歸、支持向量機回歸等。
import numpy as np # numpy庫 from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet,Lasso # 批量導入要實現的回歸算法 from sklearn.svm import SVR # SVM中的回歸算法 from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor # 集成算法 from sklearn.model_selection import cross_val_score # 交叉檢驗 from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score # 批量導入指標算法 import pandas as pd # 導入pandas import matplotlib.pyplot as plt # 導入圖形展示庫 import random # 隨機生成100組包含5組特征的數據 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)] # 訓練回歸模型 n_folds = 6 # 設置交叉檢驗的次數 model_br = BayesianRidge() # 建立貝葉斯嶺回歸模型對象 model_lr = LinearRegression() # 建立普通線性回歸模型對象 model_etc = ElasticNet() # 建立彈性網絡回歸模型對象 model_svr = SVR() # 建立支持向量機回歸模型對象 model_la = Lasso() # 建立支持向量機回歸模型對象 model_gbr = GradientBoostingRegressor() # 建立梯度增強回歸模型對象 model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'Lasso','GBR'] # 不同模型的名稱列表 model_dic = [model_br, model_lr, model_etc, model_svr,model_la, model_gbr] # 不同回歸模型對象的集合 cv_score_list = [] # 交叉檢驗結果列表 pre_y_list = [] # 各個回歸模型預測的y值列表 for model in model_dic: # 讀出每個回歸模型對象 scores = cross_val_score(model, feature, dependent, cv=n_folds) # 將每個回歸模型導入交叉檢驗模型中做訓練檢驗 cv_score_list.append(scores) # 將交叉檢驗結果存入結果列表 pre_y_list.append(model.fit(feature, dependent).predict(feature)) # 將回歸訓練中得到的預測y存入列表
model_gbr:
擬合貝葉斯嶺模型,以及正則化參數lambda(權重的精度)和alpha(噪聲的精度)的優化。
model_lr:
線性回歸擬合系數w=(w1,…)的線性模型,wp)將觀測到的目標與線性近似預測的目標之間的殘差平方和降到最小。
model_etc:
以L1和L2先驗組合為正則元的線性回歸。
model_svr:
線性支持向量回歸。
model_la:
用L1先驗作為正則化器(又稱Lasso)訓練的線性模型
# 模型效果指標評估 model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score] # 回歸評估指標對象集 model_metrics_list = [] # 回歸評估指標列表 for i in range(6): # 循環每個模型索引 tmp_list = [] # 每個內循環的臨時結果列表 for m in model_metrics_name: # 循環每個指標對象 tmp_score = m(dependent, pre_y_list[i]) # 計算每個回歸指標結果 tmp_list.append(tmp_score) # 將結果存入每個內循環的臨時結果列表 model_metrics_list.append(tmp_list) # 將結果存入回歸評估指標列表 df1 = pd.DataFrame(cv_score_list, index=model_names) # 建立交叉檢驗的數據框 df2 = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2']) # 建立回歸指標的數據框
# 模型效果可視化 plt.figure() # 創建畫布 plt.plot(np.arange(len(feature)), dependent, color='k', label='true y') # 畫出原始值的曲線 color_list = ['r', 'b', 'g', 'y', 'p','c'] # 顏色列表 linestyle_list = ['-', '.', 'o', 'v',':', '*'] # 樣式列表 for i, pre_y in enumerate(pre_y_list): # 讀出通過回歸模型預測得到的索引及結果 plt.plot(np.arange(len(feature)), pre_y_list[i], color_list[i], label=model_names[i]) # 畫出每條預測結果線 plt.title('regression result comparison') # 標題 plt.legend(loc='upper right') # 圖例位置 plt.ylabel('real and predicted value') # y軸標題 plt.show() # 展示圖像
# 模型應用 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()]] # 要預測的新數據集 print("貝葉斯嶺回歸模型預測結果:") for i, new_point in enumerate(new_point_set): # 循環讀出每個要預測的數據點 new_pre_y = model_gbr.predict(np.array(new_point).reshape(1,-1)) print ('預測隨機數值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個數據點的預測信息 print (50 * '-') print("普通線性回歸模型預測結果:") for i, new_point in enumerate(new_point_set): # 循環讀出每個要預測的數據點 new_pre_y = model_lr.predict(np.array(new_point).reshape(1,-1)) print ('預測隨機數值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個數據點的預測信息 print (50 * '-') print("彈性網絡回歸模型預測結果:") for i, new_point in enumerate(new_point_set): # 循環讀出每個要預測的數據點 new_pre_y = model_etc.predict(np.array(new_point).reshape(1,-1)) print ('預測隨機數值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個數據點的預測信息 print (50 * '-') print("支持向量機回歸模型預測結果:") for i, new_point in enumerate(new_point_set): # 循環讀出每個要預測的數據點 new_pre_y = model_svr.predict(np.array(new_point).reshape(1,-1)) print ('預測隨機數值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個數據點的預測信息 print (50 * '-') print("拉索回歸模型預測結果:") for i, new_point in enumerate(new_point_set): # 循環讀出每個要預測的數據點 new_pre_y = model_la.predict(np.array(new_point).reshape(1,-1)) print ('預測隨機數值 %d 是: %.2f' % (i + 1, new_pre_y)) # 打印輸出每個數據點的預測信息
感謝你能夠認真閱讀完這篇文章,希望小編分享的“python中如何使用線性回歸”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。