机器学习之路:python 多项式特征生成PolynomialFeatures 欠拟合与过拟合

分享一下 线性回归中 欠拟合 和 过拟合 是怎么回事~为了解决欠拟合的情 经常要提高线性的次数建立模型拟合曲线, 次数过高会导致过拟合,次数不够会欠拟合。再建立高次函数时候,要利用多项式特征生成器 生成训练数据。下面把整个流程展示一下模拟了一个预测蛋糕价格的从欠拟合到过拟合的过程

git: https://github.com/linyi0604/MachineLearning

在做线性回归预测时候,为了提高模型的泛化能力,经常采用多次线性函数建立模型

f = k*x + b   一次函数f = a*x^2 + b*x + w  二次函数f = a*x^3 + b*x^2 + c*x + w  三次函数。。。

泛化:    对未训练过的数据样本进行预测。

欠拟合:    由于对训练样本的拟合程度不够,导致模型的泛化能力不足。

过拟合:    训练样本拟合非常好,并且学习到了不希望学习到的特征,导致模型的泛化能力不足。

在建立超过一次函数的线性回归模型之前,要对默认特征生成多项式特征再输入给模型
  poly2 = PolynomialFeatures(degree=2)    # 2次多项式特征生成器
  x_train_poly2 = poly2.fit_transform(x_train)

下面模拟 根据蛋糕的直径大小 预测蛋糕价格
 1 from sklearn.linear_model import LinearRegression
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4
 5 ‘‘‘
 6 在做线性回归预测时候,
 7 为了提高模型的泛化能力,经常采用多次线性函数建立模型
 8
 9 f = k*x + b   一次函数
10 f = a*x^2 + b*x + w  二次函数
11 f = a*x^3 + b*x^2 + c*x + w  三次函数
12 。。。
13
14 泛化:
15     对未训练过的数据样本进行预测。
16
17 欠拟合:
18     由于对训练样本的拟合程度不够,导致模型的泛化能力不足。
19
20 过拟合:
21     训练样本拟合非常好,并且学习到了不希望学习到的特征,导致模型的泛化能力不足。
22
23
24 在建立超过一次函数的线性回归模型之前,要对默认特征生成多项式特征再输入给模型
25
26 下面模拟 根据蛋糕的直径大小 预测蛋糕价格
27
28 ‘‘‘
29
30 # 样本的训练数据,特征和目标值
31 x_train = [[6], [8], [10], [14], [18]]
32 y_train = [[7], [9], [13], [17.5], [18]]
33
34 # 一次线性回归的学习与预测
35 # 线性回归模型 学习
36 regressor = LinearRegression()
37 regressor.fit(x_train, y_train)
38 # 画出一次线性回归的拟合曲线
39 xx = np.linspace(0, 25, 100)   # 0到16均匀采集100个点做x轴
40 xx = xx.reshape(xx.shape[0], 1)
41 yy = regressor.predict(xx)  # 计算每个点对应的y
42 plt.scatter(x_train, y_train)   # 画出训练数据的点
43 plt1, = plt.plot(xx, yy, label="degree=1")
44 plt.axis([0, 25, 0, 25])
45 plt.xlabel("Diameter")
46 plt.ylabel("Price")
47 plt.legend(handles=[plt1])
48 plt.show()

一次线性函数拟合曲线的结果,是欠拟合的情况:

下面进行建立2次线性回归模型进行预测:

 1 # 2次线性回归进行预测
 2 poly2 = PolynomialFeatures(degree=2)    # 2次多项式特征生成器
 3 x_train_poly2 = poly2.fit_transform(x_train)
 4 # 建立模型预测
 5 regressor_poly2 = LinearRegression()
 6 regressor_poly2.fit(x_train_poly2, y_train)
 7 # 画出2次线性回归的图
 8 xx_poly2 = poly2.transform(xx)
 9 yy_poly2 = regressor_poly2.predict(xx_poly2)
10 plt.scatter(x_train, y_train)
11 plt1, = plt.plot(xx, yy, label="Degree1")
12 plt2, = plt.plot(xx, yy_poly2, label="Degree2")
13 plt.axis([0, 25, 0, 25])
14 plt.xlabel("Diameter")
15 plt.ylabel("Price")
16 plt.legend(handles=[plt1, plt2])
17 plt.show()
18 # 输出二次回归模型的预测样本评分
19 print("二次线性模型预测得分:", regressor_poly2.score(x_train_poly2, y_train))     # 0.9816421639597427

二次线性回归模型拟合的曲线:

拟合程度明显比1次线性拟合的要好

下面进行4次线性回归模型:

 1 # 进行四次线性回归模型拟合
 2 poly4 = PolynomialFeatures(degree=4)    # 4次多项式特征生成器
 3 x_train_poly4 = poly4.fit_transform(x_train)
 4 # 建立模型预测
 5 regressor_poly4 = LinearRegression()
 6 regressor_poly4.fit(x_train_poly4, y_train)
 7 # 画出2次线性回归的图
 8 xx_poly4 = poly4.transform(xx)
 9 yy_poly4 = regressor_poly4.predict(xx_poly4)
10 plt.scatter(x_train, y_train)
11 plt1, = plt.plot(xx, yy, label="Degree1")
12 plt2, = plt.plot(xx, yy_poly2, label="Degree2")
13 plt4, = plt.plot(xx, yy_poly4, label="Degree2")
14 plt.axis([0, 25, 0, 25])
15 plt.xlabel("Diameter")
16 plt.ylabel("Price")
17 plt.legend(handles=[plt1, plt2, plt4])
18 plt.show()
19 # 输出二次回归模型的预测样本评分
20 print("四次线性模型预测得分:", regressor_poly4.score(x_train_poly4, y_train))     # 1.0

四次线性模型预测准确率为百分之百, 但是看一下拟合曲线,明显存在不合逻辑的预测曲线,

在样本点之外的情况,可能预测的非常不准确,这种情况为过拟合



原文地址:https://www.cnblogs.com/Lin-Yi/p/8975638.html

时间: 2024-10-01 19:26:29

机器学习之路:python 多项式特征生成PolynomialFeatures 欠拟合与过拟合的相关文章

机器学习之路: python k近邻分类器 鸢尾花分类预测

使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/kaggle 1 from sklearn.datasets import load_iris 2 from sklearn.cross_validation import train_test_split 3 from sklearn.preprocessing import StandardScaler 4 from sklearn.neighbors i

机器学习之路: python 决策树分类 预测泰坦尼克号乘客是否幸存

使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https://github.com/linyi0604/MachineLearning 1 import pandas as pd 2 from sklearn.cross_validation import train_test_split 3 from sklearn.feature_extraction

机器学习之路: python 线性回归LinearRegression, 随机参数回归SGDRegressor 预测波士顿房价

python3学习使用api 线性回归,和 随机参数回归 git: https://github.com/linyi0604/MachineLearning 1 from sklearn.datasets import load_boston 2 from sklearn.cross_validation import train_test_split 3 from sklearn.preprocessing import StandardScaler 4 from sklearn.linear

机器学习之路: python 回归树 DecisionTreeRegressor 预测波士顿房价

python3 学习api的使用 git: https://github.com/linyi0604/MachineLearning 代码: 1 from sklearn.datasets import load_boston 2 from sklearn.cross_validation import train_test_split 3 from sklearn.preprocessing import StandardScaler 4 from sklearn.tree import De

数学之路-python计算实战(3)-霍纳法则

假设有n+2个实数a0,a1,-,an,和x的序列,要对多项式Pn(x)= anx ^n+a(n-1)x^(n-1)+-+a1x+a0求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+-+1=n(n+1)/2次乘法运算和n次加法运算.有没有更高效的算法呢?答案是肯定的.通过如下变换我们可以得到一种快得多的算法,即Pn(x)= anx ^n+a(n-1)x^(n-1)+-+a1x+a0=((-(((anx +an-1)x+an-2)x+ an-

机器学习基础:(Python)训练集测试集分割与交叉验证

在上一篇关于Python中的线性回归的文章之后,我想再写一篇关于训练测试分割和交叉验证的文章.在数据科学和数据分析领域中,这两个概念经常被用作防止或最小化过度拟合的工具.我会解释当使用统计模型时,通常将模型拟合在训练集上,以便对未被训练的数据进行预测. 在统计学和机器学习领域中,我们通常把数据分成两个子集:训练数据和测试数据,并且把模型拟合到训练数据上,以便对测试数据进行预测.当做到这一点时,可能会发生两种情况:模型的过度拟合或欠拟合.我们不希望出现这两种情况,因为这会影响模型的可预测性.我们有

Stanford机器学习[第三课]-欠拟合与过拟合

1.本次课程大纲 局部加权回归: 线性回归的变化版本 Probability interpretation:另一种可能的对于线性回归的解释 Logistic回归: 基于2的一个分类算法 感知器算法: 对于3的延伸,简要讲 牛顿方法(用来对logistic进行拟合的算法,这节课没讲) 2.过拟合与欠拟合的距离 评估房子的价格,假设三种拟合算法: (1)X1=size, 拟合出一条线性曲线: (2)x1=size,x2=(size)2,拟合出一条二次曲线: (3)训练集共有7个数据,建立六个特征,拟

数学之路-python计算实战(18)-机器视觉-滤波去噪(双边滤波与高斯滤波 )

高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到.高斯滤波的具体操作是:用一个模板(或称卷积.掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值. #滤波去噪 lbimg=cv2.GaussianBlur(newimg,(3,3),1.8) cv2.imshow('src',newimg) cv2.imshow('dst',lbimg) cv2.waitKey() cv2.destroyAllW

数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)

# -*- coding: utf-8 -*- #code:[email protected] #邻域平均法滤波,半径为2 import cv2 import numpy as np fn="test3.jpg" myimg=cv2.imread(fn) img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) #加上椒盐噪声 param=20 #灰阶范围 w=img.shape[1] h=img.shape[0] newimg=np.array(img)