当前位置:   article > 正文

sklearn之线性回归和多项式回归_sklearn线性回归怎么添加二次

sklearn线性回归怎么添加二次

涉及内容

  • 多项式回归
  • 多项式的sklearn实现
  • 偏差和方差
  • 增加算法模型泛化能力的正则化处理

多项式回归

  • 研究一个因变量与一个或多个自变量(特征)间多项式的回归分析,成为多项式回归(Ploynomial Regression).其为线性回归模型,其回归函数关于回归系数是线性的,自变量x和因变量y之间的关系被建模为n次多项式
  • 当自变量只有一个时,成为一元多项式回归;如果自变量(特征)为多个时,称为多项式回归。在一元回归分析中,如果变量y与自变量x的关系为非线性的,且找不到适当函数曲线来拟合,可以采用一元多项式回归。
  • 任何函数都可以多项式来逼近,故多项式回归有着广泛应用,如在SVM的核函数,如下面非线性关系数据,无法用直线拟合,但是可以使用多项式更好的拟合
    多项式拟合曲线关系数据
  • 与简单线性回归,其输入特征只有一维,即:y=ax+b,(a为曲线斜率吧,b为截距项(或偏置项)),推广到多维特征,即有多个输入特征的线性回归:y = a1*X1 + a2*X2 + … + an*Xn + b
  • 线性回归的的本质有个很强的假设条件:数据存在线性关系,但现实世界中往往是非线性的。因此要对回归算法进行改进,使用多项式回归,可对非线性数据进行处理

多项式回归实现思路

  • 首先准备数据,创建一个一元二次方程,并增加一些噪音,先用线性关系拟合
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    
    
    class LineRegression:
    	def __init__(self):
        		pass
    
            @staticmethod
    	def line_regression():
        		# 训练数据
        		x = np.random.uniform(-3, 3, size=100)
        		# 构建一元关系
        		y = 0.5 + x**2+x+2+np.random.normal(0, 1, size=100)
    
       		# 构建线性回归模型
        		line_regression = LinearRegression()
    
        		# 将训练特征转换为 1行100列特征,对应 实际y值得个数
        		train_data = x.reshape(-1, 1)
        		line_regression.fit(X=train_data, y=y)
        		# 给出预测值
        		y_predict = line_regression.predict(train_data)
    
        		# plt展示 y与 x之间的关系
        		plt.scatter(x, y)
        		# plt展示 实际y值与预测值的偏差
        		plt.scatter(x, y_predict, edgecolors='r')
    
       		plt.show()
    
    if __name__ == "__main__":
    	 PolyRegression.line_regression()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    线性回归拟合非线性关系
  • 使用多项式回归拟合
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    
    class PolyRegression:
    	def __init__(self):
    		pass
    
    	@staticmethod
    	def poly_regression():
    		# 训练数据
    		x = np.random.uniform(-3, 3, size=100)
    		# 构建一元关系
    		y = 0.5 + x**2+x+2+np.random.normal(0, 1, size=100)
    
    		# 构建线性回归模型
    		line_regression = LinearRegression()
    
    		# 将训练特征转换为 1行100列特征,对应 实际y值得个数
    		train_data = x.reshape(-1, 1)
    
    		# 使用多项式,先创建一个新特征
    		# (train_data**2).reshape
    
    		# 创建一个新特征
    		new_feature_data = np.hstack([train_data, train_data**2])
    		# 构建模型
    		line_regression.fit(X=new_feature_data, y=y)
    		# 给出预测值
    		y_predict = line_regression.predict(new_feature_data)
    
    		# plt展示 y与 x之间的关系
    		plt.scatter(x, y)
    		# plt展示 实际y值与预测值的偏差
    		plt.scatter(np.sort(x), y_predict[np.argsort(x)], edgecolors='r')
    
    		plt.show()
    		# 输出模型指标,斜率,截距项协方差
    		print(line_regression.coef_, line_regression.intercept_)
    
    if __name__ == "__main__":
    	PolyRegression.poly_regression()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    多项式拟合的结果

sklearn中的一元多项式回归

  • 代码实现及拟合效果
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import  LinearRegression


class PolyRegression:
	def __init__(self):
		pass

	@staticmethod
	def poly_regression():
		# 1.预处理训练数据
		x = np.random.uniform(-3, 3, size=100)
		# 构建一元关系
		y = 0.5 + x**2+x+2+np.random.normal(0, 1, size=100)
		# 将训练特征转换为 1行100列特征,对应 实际y值得个数
		train_data = x.reshape(-1, 1)

		# 构建线性回归模型,degree表示使用多少幂次(多项式的最高次数)
		sklearn_poly_regression = PolynomialFeatures(degree=2)
		# 拟合数据
		sklearn_poly_regression.fit(train_data)
		# 转换数据
		X2 = sklearn_poly_regression.transform(X=train_data)
		# X2 集合的形式 为100行 3列
		print(X2.shape)
		# 查看前5行,所有列的数据,:5指前5行数据,所有列数据
		# 第一列为0次方,第二列是一次项系数(原来数据样本特征),第三列是二次线系数
		print(X2[:5, :])
		
   	        # 2.模型训练
		reg = LinearRegression()
		reg.fit(X=X2, y=y)
		# 给出预测值
		y_predict = reg.predict(X2)

		# plt展示 y与 x之间的关系
		plt.scatter(x, y)
		# plt展示 实际y值与预测值的偏差
		plt.scatter(np.sort(x), y_predict[np.argsort(x)], edgecolors='r')

		plt.show()

if __name__ == "__main__":
		PolyRegression.poly_regression()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

sklearn

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/412038
推荐阅读
相关标签
  

闽ICP备14008679号