(一)多項式回歸簡介:
多項式回歸中,加入了特徵的更高次方,也相當於增加了模型的自由度,用來捕獲資料中非線性的變化。新增高階項的時候,也增加了模型的複雜度。隨著模型複雜度的公升高,模型的容量以及擬合資料的能力增加,可以進一步降低訓練誤差,但導致過擬合的風險也隨之增加。
(二)多項式回歸實現原理:
我們以y=ax2為例。實際上就是將x2作為乙個特徵值。
__author__ = 'administrator'
import sys
import numpy as np
import matplotlib.pyplot as plt
x=np.random.uniform(-3,3,size=100)
x=x.reshape(-1,1)
y=2*x**2+3*x+2+np.random.normal(0,1,size=100)
plt.scatter(x,y,c='g')
from sklearn import linear_model
linear_regressor = linear_model.linearregression()
linear_regressor.fit(x, y)
y_pred=linear_regressor.predict(x)
plt.plot(x,y_pred,c='red')
#解決方案,新增乙個特徵值。
x2=np.hstack([x,x**2])
# print(x2)
linear_regressor2 = linear_model.linearregression()
linear_regressor2.fit(x2, y)
y_pred2=linear_regressor2.predict(x2)
plt.plot(np.sort(x),y_pred2[np.argsort(x)],c='b')
plt.show()
print(linear_regressor2.coef_)
print(linear_regressor2.intercept_)
當然,我們擬合的自由度越高,就需要新增的特徵值就越多,計算複雜度急劇上公升。如果是輸入樣本具有兩個特徵值(依然為2階),那麼,就需要分別計算x1
2、x2
2、x1x2加上原來的兩個,這樣需要計算5個特徵值的線性回歸樣本了。
(三)sklearn中多項式實現方法:
import sys
import numpy as np
filename = "test.txt"
x = ;y =
with open(filename, 'r') as f:
for line in f.readlines():
data = [float(i) for iin line.split(',')]
xt, yt = data[:-1],data[-1]
train = int(0.7* len(x))
test = len(x) - train
x_train = np.array(x[:train])
y_train = np.array(y[:train])
x_test = np.array(x[train:])
y_test = np.array(y[train:])
from sklearn import linear_model
linear_regressor = linear_model.linearregression()
linear_regressor.fit(x_train, y_train)
from sklearn.preprocessing import polynomialfeatures
polynomial = polynomialfeatures(degree=3)
x_train_transformed = polynomial.fit_transform(x_train)
datapoint = np.array([[-0.13,1.47,4.46]]) #樣本真值為-9.81
poly_datapoint = polynomial.fit_transform(datapoint)
poly_linear_model = linear_model.linearregression()
poly_linear_model.fit(x_train_transformed, y_train)
print("linear regression:\n",linear_regressor.predict(datapoint))
print("polynomial regression:\n",poly_linear_model.predict(poly_datapoint))
poly_linear_model = linear_model.linearregression()
poly_linear_model.fit(x_train_transformed, y_train)
print("\nlinear regression:\n",linear_regressor.predict(datapoint))
print("\npolynomial regression:\n",poly_linear_model.predict(poly_datapoint))
機器學習 特徵工程 多項式拓展
庫 sklearn.preprocessing.polynomialfeatures 1 polynomialfeatures內部引數 degree 控制多項式的度 interaction only 預設為false,如果指定為true,那麼就不會有特徵自己和自己結合的項,以ab兩項為例的話,拓展出...
機器學習筆記 多項式回歸
比如你的資料分布,是符合y 0.5 x 2 x 2的.那你用y ax b去擬合,無論如何都沒法取的很好的效果.通過上面的分析,我們可以看出,我們想做的事情是對樣本做公升維 即增加樣本的特徵數目 sklean中完成這一功能的類叫做polynomialfeatures.classsklearn.prep...
python 機器學習多項式回歸
現實世界的曲線關係都是通過增加多項式實現的,現在解決多項式回歸問題 住房 樣本 樣本影象 import matplotlib.font manager as fm import matplotlib.pyplot as plt myfont fm.fontproperties fname c win...