邏輯回歸解決二分類問題,但是像下圖所示的非線性資料集,是沒辦法用一條直線分割為兩部分的。
對於此資料集,用乙個圓形或者橢圓形分割是比較合理的,圓形的表示式:\(x_1^2 + x_2^2 - r^2 = 0\)
為了讓邏輯回歸學習到這樣的決策邊界,我們需要引入多項式項,\(x_1^2,x_2^2\)分別是\(x_1,x_2\)的二次多項式。使用多項式後,可以定義任意圓心位置的圓、橢圓或不規則形狀的決策邊界。
構造資料集
邏輯回歸演算法測試
from mylib.logisticregression import logisticregression
log = logisticregression()
log.fit(x,y)
演算法正確率只有60%
畫出決策邊界:
可以看出,用線性分類來擬合此資料集是錯誤的
from sklearn.pipeline import pipeline
from sklearn.preprocessing import polynomialfeatures
from sklearn.preprocessing import standardscaler
def polynomiallogisticregression(degree):
return pipeline([
('poly',polynomialfeatures(degree=degree)),
('stand_scalor',standardscaler()),
('log_reg',logisticregression())
])poly_log_reg = polynomiallogisticregression(2)
poly_log_reg.fit(x,y)
注意:管道中的邏輯回歸是自己實現的,但是能準確的傳遞到管道中,這是因為我們是仿照scikit-learn的標準實現的
新增多項式後,演算法的準確率提高到了95%
決策邊界:
當多項式項為20時
隨著項數的增加,演算法變得複雜,趨於過擬合,但為了得到複雜形狀的決策邊界,又不能過多的減小多項式項,此時,應該考慮模型的正則化,見下章。
多項式特徵
在使用單項式特徵的時候,模型函式的型式是y a x b y c z d y a x b y c z d y a x b y c z d,但我們還可以加入多項式作為新的特徵,例如二項式增加以下特徵 x 在網路搜尋中使用 from sklearn.pipeline import pipeline fro...
多項式回歸
import numpy as np import matplotlib.pyplot as plt x np.random.uniform 3,3,size 100 x x.reshape 1,1 y 0.5 x 2 x 2 np.random.normal 0,1,100 plt.scatter...
多項式回歸
多項式回歸 import torch import numpy defmake features x 獲取 x,x 2,x 3 的矩陣 x x.unsqueeze 1 將一維資料變為 n,1 二維矩陣形式 return torch.cat x i for i in range 1 4 1 按列拼接 ...