机器学习-线性回归(Linear Regression)
目錄
1.什么是線性回歸
2. 能夠解決什么樣的問題
3. 一般表達式是什么
4. 如何計算
4.1 Loss Function--MSE
4.2 標準方程方法
5. 過擬合問題如何解決
5.1 什么是L2正則化(嶺回歸)
5.2 什么場景下用L2正則化
5.3 什么是L1正則化(Lasso回歸)
5.4 什么場景下使用L1正則化
5.5 什么是ElasticNet回歸
5.6 ElasticNet回歸的使用場景
6. 線性回歸要求因變量服從正態分布?
7. 實現代碼
???????
1.什么是線性回歸
- 線性:兩個變量之間的關系是一次函數關系的——圖象是直線,叫做線性。
- 非線性:兩個變量之間的關系不是一次函數關系的——圖象不是直線,叫做非線性。
- 回歸:人們在測量事物的時候因為客觀條件所限,求得的都是測量值,而不是事物真實的值,為了能夠得到真實值,無限次的進行測量,最后通過這些測量數據計算回歸到真實值,這就是回歸的由來。
2. 能夠解決什么樣的問題
對大量的觀測數據進行處理,從而得到比較符合事物內部規律的數學表達式。也就是說尋找到數據與數據之間的規律所在,從而就可以模擬出結果,也就是對結果進行預測。解決的就是通過已知的數據得到未知的結果。例如:對房價的預測、判斷信用評價、電影票房預估等。
3. 一般表達式是什么
w叫做x的系數,b叫做偏置項。
4. 如何計算
4.1 Loss Function--MSE
利用梯度下降法找到最小值點,也就是最小誤差,最后把 w 和 b 給求出來。
4.2 標準方程方法
可以利用Python進行矩陣運算直接求解,也可以使用sk-learn進行求解
5. 過擬合問題如何解決
使用正則化項,也就是給loss function加上一個參數項,正則化項有L1正則化、L2正則化、ElasticNet。加入這個正則化項好處:
- 控制參數幅度,不讓模型“無法無天”。
- 限制參數搜索空間
- 解決過擬合的問題。
5.1 什么是L2正則化(嶺回歸)
方程:
表示上面的 loss function ,在loss function的基礎上加入w參數的平方和乘以?
?,假設:
回憶以前學過的單位元的方程:
正和L2正則化項一樣,此時我們的任務變成在L約束下求出J取最小值的解。求解J0的過程可以畫出等值線。同時L2正則化的函數L也可以在w1w2的二維平面上畫出來。如下圖:
L表示為圖中的黑色圓形,隨著梯度下降法的不斷逼近,與圓第一次產生交點,而這個交點很難出現在坐標軸上。這就說明了L2正則化不容易得到稀疏矩陣,同時為了求出損失函數的最小值,使得w1和w2無限接近于0,達到防止過擬合的問題。
5.2 什么場景下用L2正則化
只要數據線性相關,用LinearRegression擬合的不是很好,需要正則化,可以考慮使用嶺回歸(L2), 如果輸入特征的維度很高,而且是稀疏線性關系的話, 嶺回歸就不太合適,考慮使用Lasso回歸。
5.3 什么是L1正則化(Lasso回歸)
L1正則化與L2正則化的區別在于懲罰項的不同:
求解J0的過程可以畫出等值線。同時L1正則化的函數也可以在w1w2的二維平面上畫出來。如下圖:
懲罰項表示為圖中的黑色棱形,隨著梯度下降法的不斷逼近,與棱形第一次產生交點,而這個交點很容易出現在坐標軸上。這就說明了L1正則化容易得到稀疏矩陣。
5.4 什么場景下使用L1正則化
L1正則化(Lasso回歸)可以使得一些特征的系數變小,甚至還使一些絕對值較小的系數直接變為0,從而增強模型的泛化能力 。對于高的特征數據,尤其是線性關系是稀疏的,就采用L1正則化(Lasso回歸),或者是要在一堆特征里面找出主要的特征,那么L1正則化(Lasso回歸)更是首選了。
5.5 什么是ElasticNet回歸
ElasticNet綜合了L1正則化項和L2正則化項,以下是它的公式:
5.6 ElasticNet回歸的使用場景
ElasticNet在我們發現用Lasso回歸太過(太多特征被稀疏為0),而嶺回歸也正則化的不夠(回歸系數衰減太慢)的時候,可以考慮使用ElasticNet回歸來綜合,得到比較好的結果。
關于L1/L2正則化的解釋,可以參考這篇文章
機器學習中正則化項L1和L2的直觀理解_小平子的專欄-CSDN博客_l2正則
6. 線性回歸要求因變量服從正態分布?
我們假設線性回歸的噪聲服從均值為0的正態分布。 當噪聲符合正態分布N(0,delta^2)時,因變量則符合正態分布N(ax(i)+b,delta^2),其中預測函數y=ax(i)+b。這個結論可以由正態分布的概率密度函數得到。也就是說當噪聲符合正態分布時,其因變量必然也符合正態分布。
在用線性回歸模型擬合數據之前,首先要求數據應符合或近似符合正態分布,否則得到的擬合函數不正確。
7. 實現代碼
參考:https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/Code/Day2_Simple_Linear_Regression.md
# Step 1: Data Preprocessingimport pandas as pd import numpy as np import matplotlib.pyplot as pltdataset = pd.read_csv('studentscores.csv') X = dataset.iloc[ : , : 1 ].values Y = dataset.iloc[ : , 1 ].valuesfrom sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0) # Step 2: Fitting Simple Linear Regression Model to the training setfrom sklearn.linear_model import LinearRegressionregressor = LinearRegression()regressor = regressor.fit(X_train, Y_train)# Step 3: Predecting the ResultY_pred = regressor.predict(X_test)# Step 4: Visualization ## Visualising the Training resultsplt.scatter(X_train , Y_train, color = 'red')plt.plot(X_train , regressor.predict(X_train), color ='blue')## Visualizing the test resultsplt.scatter(X_test , Y_test, color = 'red')plt.plot(X_test , regressor.predict(X_test), color ='blue')?文章內容參考:
ML-NLP/Machine Learning at master · NLP-LOVE/ML-NLP · GitHub此項目是機器學習(Machine Learning)、深度學習(Deep Learning)、NLP面試中常考到的知識點和代碼實現,也是作為一個算法工程師必會的理論基礎知識。 - ML-NLP/Machine Learning at master · NLP-LOVE/ML-NLPhttps://github.com/NLP-LOVE/ML-NLP/tree/master/Machine%20Learning
總結
以上是生活随笔為你收集整理的机器学习-线性回归(Linear Regression)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女大学生坐高铁拒绝补票刁难乘务长 后排乘
- 下一篇: [转载]Mac使用vim命令修改配置文件