機器學習經典演算法之(十九)多項式回歸

2021-08-20 20:27:48 字數 2649 閱讀 6300

(一)多項式回歸簡介:

多項式回歸中,加入了特徵的更高次方,也相當於增加了模型的自由度,用來捕獲資料中非線性的變化。新增高階項的時候,也增加了模型的複雜度。隨著模型複雜度的公升高,模型的容量以及擬合資料的能力增加,可以進一步降低訓練誤差,但導致過擬合的風險也隨之增加。

(二)多項式回歸實現原理:

我們以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...