前言:萌新整理了一些上課筆記,以及一些課外資料,網課資料等,稍稍總結一下
--------------------------------正文分割線------------------------------------------
文章目錄
1.基本形式和常見類別
1.1 基本形式
線性迴歸是線性模型的一種,其基本形式如下
1.2 常見類別
sklearn中的線性模型模塊爲linear_model。linear_model包含了多種多樣的類和函數,例如,普通線性迴歸,多項式迴歸,嶺迴歸,LASSO,以及彈性網等。
2.定義
3.確定模型的思路
模型的確定有統計學角度和機器學習的角度,在本文中,使用的是機器學習的角度,從矩陣形式來理解之。
4.損失函數
5.多元線性迴歸
5.1 基本原理
補充解釋:
w爲x的迴歸係數矩陣
b爲截距(intercept),又可以寫作w0等形式,它代表一個常數
其他形式
w1~wn爲迴歸係數
b爲截距(intercept),又可以寫作w0等形式,它代表一個常數
5.2 損失函數
這個損失函數代表了(yi-Xiw)的L2範式的平方結果,L2範式的本質是就是歐式距離,即是兩個向量上的每個點對應相減後的平方和再開平方.
現在只實現了向量上每個點對應相減後的平方和,並沒有開方,所以損失函數是L2範式,即歐式距離的平方結果。
預測結果和真實值差異越小越好, 此時,求解目標就可以轉化成如下形式:
這個式子,也正是sklearn當中,用在類Linear_model.LinerRegression背後使用的損失函數。
該式即爲我們熟知的SSE(Sum of Sqaured Error,誤差平方和)或者RSS(Residual Sum of Squares 殘差平方和)。在sklearn官網文檔中,一般稱之爲RSS殘差平方和。
5.3 最小二乘法求解多元線性迴歸的參數
問題轉換成了求解讓RSS最小化的參數向量 ,這種通過最小化真實值和預測值之間的RSS來求解參數的方法叫【最小二乘法】。
列式如下:
在這裏,逆矩陣存在的充分必要條件是特徵矩陣不存在多重共線性。
5.4 正則化
6.linear_model.LinearRegression
class sklearn.linear_model.LinearRegression (fifit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
參數 | 含義 |
---|---|
fit_intercept | bool,可不填,默認爲True。 是否計算該模型的截距,若爲False,則不計算 |
normalize | bool,可不填,默認爲False。 當fit_intercept設置爲False時,將忽略此參數。如果爲True,則特徵矩陣X在進入迴歸之前將 會被減去均值(中心化)併除以L2範式(縮放)。如果你希望進行標準化,請在fifit數據之前 使用preprocessing模塊中的標準化專用類StandardScaler 。 |
copy_X | bool, 可不填,默認爲True。若爲真,則在X.copy()上進行操作,否則的話原本的特徵矩陣X可能被線性迴歸影響並覆蓋。 |
n_jobs | 整數或者None,可不填,默認爲None 用於計算的作業數。只在多標籤的迴歸和數據量足夠大的時候才生效。除非None在 joblib.parallel_backend上下文中,否則None統一表示爲1。如果輸入 -1,則表示使用全部的CPU來進行計算。 |
7.實戰演練
詳情請見我得另一篇博文,點擊這裏
8.自己實現最小二乘法嘗試
# 自定義最小二乘法嘗試
def my_least_squares(x_array, y_array):
'''
:param x: 列表,表示m*n矩陣
:param y: 列表,表示m*1矩陣
:return: coef:list 迴歸係數(1*n矩陣) intercept: float 截距
'''
# 矩陣對象化
arr_x_01 = np.array(x_array)
arr_y_01 = np.array(y_array)
# x_array由 m*n矩陣轉化爲 m*(n+1)矩陣,其中第n+1列係數全爲1
# 獲取行數
row_num = arr_x_01.shape[0]
# 生成常量係數矩陣 m*1矩陣
arr_b = np.array([[1 for i in range(0, row_num)]])
# 合併成m*(n+1)矩陣
arr_x_02 = np.insert(arr_x_01, 0, values=arr_b, axis=1)
# 矩陣運算
w = np.linalg.inv(np.matmul(arr_x_02.T, arr_x_02))
w = np.matmul(w, arr_x_02.T)
w = np.matmul(w, arr_y_01)
# w爲1*(n+1)矩陣
# print(w)
result = list(w)
coef = result.pop(-1)
intercept = result
return coef, intercept
9.補充說明
模型優化
嶺(ridge)迴歸和拉索(lasso)迴歸
等會後續在我的博客中補充