需要源码请点赞关注收藏后评论区留言私信~~~
线性回归是用一条直线或者一个平面(超平面)去近似原始样本在空间中的分布。线性回归的局限性是只能应用于存在线性关系的数据中,但是在实际生活中,很多数据之间是非线性关系,虽然也可以用线性回归拟合非线性回归,但是效果会变差,这时候就需要对线性回归模型进行改进,使之能够拟合非线性数据
非线性回归是用一条曲线或者曲面去逼近原始样本在空间中的分布,它“贴近”原始分布的能力一般较线性回归更强
线性回归的局限性是只能应用于存在线性关系的数据中,但是在实际生活中,很多数据之间是非线性关系,虽然也可以用线性回归拟合非线性回归,但是效果会变差,这时候就需要对线性回归模型进行改进,使之能够拟合非线性数据
多项式回归
多项式回归(Polynomial Regression)是研究一个因变量与一个或多个自变量间多项式关系的回归分析方法。多项式回归模型是非线性回归模型中的一种。由泰勒级数可知,在某点附近,如果函数n次可导,那么它可以用一个n次的多项式来近似
研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归(Polynomial Regression)。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。在一元回归分析中,如果因变量y与自变量x的关系为非线性的,但又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。在这种回归技术中,最佳拟合线不是直线,而是一个用于拟合数据点的曲线
多项式回归的最大优点是可以通过增加x的高次项对观测点进行逼近,直到满意为止。多项式回归在回归分析中占有重要地位,因为任意函数都可以分段用多项式逼近
进行多项式回归分析,首先要确定多项式的次数。次数的确定一般是根据经验和实验。假设确定了用一个一元n次多项式来拟合训练样本集,模型可表示如下
那么多项式回归的任务就是估计出各θ值。可以采用均方误差作为损失函数,用梯度下降法求解,但难度较大
多项式回归实战
先拟定一个一元三次多项式作为目标函数,然后再加上一些噪声产生样本集,再用转化的线性回归模型来完成拟合,最后对测试集进行预测。采用sklearn.linear_model包中的LinearRegression函数来完成
产生样本集与测试集:
可见三次多项式的模拟比较精确 可以拟合大部分的样本点
下面我们用线性回归与多项式回归来对比拟合效果
首先准备数据 可视化如下
用线性回归拟合如下 可见在复杂情况下线性回归拟合效果并不好
多项式回归拟合如下 可见效果明显好于线性回归 精度较高
最后 部分代码如下
import numpy as np import matplotlib.pyplot as plt x = np.random.uniform(-3,3, size=100) # 产生100个随机数 X = x5 * 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.rcParams['font.family']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.tier(x,y) plt.plot(x,y_predict,color='r') plt.show() from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) #设置最多添加几次幂的特征项 poly.fit(X) x2 = poly.transform(X) from sklearn.linear_model import LinearRegression #接下来的代码和线性回归一致 lin_reg2= lin_reg2.predict(x2) plt.scatter(x,y) plt.plot(np.sort(x),y_predict2[np.argsort(x)],color='r') plt.title('多项式回归')
创作不易 觉得有帮助请点赞关注收藏~~~