线性回归要求数据存在线性关系。
但实际场景中,存在强线性关系的数据是比较少的,大部分情况下数据之间是非线性关系。
用一种简单的手段改进线性回归法,使得它可以处理和预测非线性数据。
即多项式回归。

准备数据

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, size=100) plt.scatter(X, y) plt.show()

使用线性回归

from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X, y) y_predict = lin_reg.predict(X) plt.scatter(x, y) plt.plot(x, y_predict, color='r') plt.show()

解决方案, 添加一个特征

X2 = np.hstack([X, X**2]) lin_reg2 = LinearRegression() lin_reg2.fit(X2, y) y_predict2 = lin_reg2.predict(X2) plt.scatter(x, y) plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r') plt.show()

看上去这根曲线拟合得更好。

输入:lin_reg2.coef_
输出:array([0.99902653, 0.46334749])
0.999是x的系数,0.46是x^2的系数

输入:lin_reg2.intercept_
输出:2.0518267069340164

结论

使用线性回归的思路,为原来的样本添加新的特征,新的特征是原有特征的多项式的组合。以此来解决非线性问题。

PCA是对数据做降维处理,这里则是对数据集升维。通过升维和添加特征,使算法拟合高维度的数据。