機器學習筆記之 線性迴歸技術

  1、概念算法

  線性迴歸是一種有監督的迴歸分析技術,其是找出自變量與因變量之間的因果關係,本質上是一個函數估計的問題。迴歸分析的因變量應該是連續變量,若因變量爲離散變量,則問題就轉化爲分類問題。迴歸分析主要應用場景爲預測,經常使用的算法有以下:線性迴歸、二項式迴歸、嶺迴歸、Lasso等。網絡

  2、模型的表達式及推導app

  


  現有以下訓練集:ide

  D={(X1,Y1),(X2,Y2),...,(Xn,Yn)}函數

  寫成矩陣形式:spa

  


  如今目的是對於給定的X找出W的最優解3d

  採用最小二乘法來求解:先假設這個線的方程成立,而後把樣本數據點代入假設的方程獲得觀測值,求使得實際值與觀測值相減的平方和最小的參數。對變量求偏導聯立即可求。對象

  所以咱們能夠獲得以下的損失函數:blog

  推導:索引

  目標是求的W使得損失函數的值最小,求解以下:

  


  對W求偏導,得出以下結果:

  


  本文主要介紹線性迴歸的通常推導,後續會推出採用梯度降低法求上述解的過程。

  代碼實例

  本文在實現線性迴歸的技術時,爲了做爲對比,採用了多種迴歸算法技術,如普通線性迴歸,貝葉斯迴歸,SVM,集成算法等,這樣對於算法的選擇有一個比較。下面來看具體代碼實現:

  import numpy as np

  import pandas as pd

  import matplotlib.pyplot as plt #導入圖形展現庫

  from sklearn.linear_model import BayesianRidge,LinearRegression,ElasticNet #批量導入要實現的迴歸算法

  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 #批量導入指標算法

  raw_data=np.loadtxt('D:\\data\\regression.txt')

  x=raw_data[:,:-1] #分隔自變量

  y=raw_data[:,-1] #分隔因變量

  #訓練迴歸模型無錫婦科檢查醫院 http://www.87554006.com/

  n_folds=6 #設置交叉檢驗的次數

  model_br=BayesianRidge() #創建貝葉斯嶺迴歸模型對象

  model_lr=LinearRegression() #創建普通線性迴歸模型對象

  model_etc=ElasticNet() #創建彈性網絡迴歸模型

  model_svr=SVR() #創建支持向量機迴歸模型

  model_gbr=GradientBoostingRegressor() #創建梯度加強迴歸模型對象

  model_names=['BayesianRidge','LinearRegression','ElasticNet','SVR','GBR'] #不一樣模型的名稱列表

  model_dic=[model_br,model_lr,model_etc,model_svr,model_gbr] #不一樣模型對象名稱的列表

  cv_score_list=[] #交叉驗證結果列表

  pre_y_list=[] #各個迴歸模型預測的y值列表

  for model in model_dic: #讀出每一個迴歸模型對象

  scores=cross_val_score(model,x,y,cv=n_folds) #將每一個迴歸模型導入交叉檢驗模型中作訓練檢驗

  cv_score_list.append(scores) #將交叉驗證結果存入到結果列表

  pre_y_list.append(model.fit(x,y).predict(x)) #將回歸訓練中獲得的預測y存入到列表

  #模型效果指標評估

  n_samples,n_features=x.shape #總樣本量,總特徵數

  model_metrics_name=[explained_variance_score,mean_absolute_error,mean_squared_error,r2_score] #迴歸評估指標對象集

  model_metrics_list=[] #迴歸評估指標列表

  for i in range(5): #循環每一個模型索引

  tmp_list=[] #每一個內循環的臨時結果列表

  for m in model_metrics_name: #循環每一個指標對象

  tmp_score=m(y,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']) #創建迴歸指標的數據框

  print ('samples:%d\t features:%d' % (n_samples,n_features)) #打印輸出樣本量和特徵數量

  print (90*'-') #打印分隔線

  print ('cross validation result:') #打印輸出標題

  print (df1) #打印輸出交叉檢驗的數據框

  print (90*'-') #打印輸出分隔線

  print ('regression metrics:') #打印輸出標題

  print (df2) #打印輸出迴歸指標的數據框

  print (90*'-') #打印輸出分隔線

  print ('short name \t full name') #打印輸出縮寫和全名標題

  print ('ev \t explained_variance')

  print ('mae \t mean_absolute_error')

  print ('mse \t mean_squared_error')

  print ('r2 \t r2')

  print (90*'-') #打印輸出分隔線

  運行結果

  ------------------------------------------------------------------------------------------

  指標解釋:

  從上圖中能夠看出:加強梯度(GBR)迴歸效果是全部模型中迴歸效果最好的,從迴歸矩陣(regression metrics)中看出其方差解釋ev達到了0.975,而且其平均絕對偏差和均方差都是最低的,分別爲1.15二、2.100。從交叉驗證的結果能夠看出,GBR在交叉驗證的6次驗證中,其結果的穩定性相對較高,這證實該算法在應對不一樣的數據時穩定效果較好。

  模型效果的可視化

  模型擬合好之後,能夠將幾種迴歸效果藉助matplotlib進行展現。代碼以下:

  #模型效果的可視化

  plt.figure #建立畫布

  plt.plot(np.arange(x.shape[0]),y,color='k',label='true y') #畫出原始值得曲線

  color_list=['r','b','g','y','c'] #顏色列表

  linesytle_list=['-','.','o','v','*'] #樣式列表

  for i,pre_y in enumerate(pre_y_list):

  plt.plot(np.arange(x.shape[0]),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() #展現圖像

相關文章
相關標籤/搜索