gpt4 book ai didi

python - PolynomialFeatures 和 LinearRegression 返回不需要的系数

转载 作者:行者123 更新时间:2023-12-03 22:49:41 25 4
gpt4 key购买 nike

import os
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

csv_path = os.path.join('', 'graph.csv')
graph = pd.read_csv(csv_path)

y = graph['y'].copy()
x = graph.drop('y', axis=1)

pipeline = Pipeline([('pf', PolynomialFeatures(2)), ('clf', LinearRegression())])
pipeline.fit(x, y)

predict = [[16], [20], [30]]

plt.plot(x, y, '.', color='blue')
plt.plot(x, pipeline.predict(x), '-', color='black')
plt.plot(predict, pipeline.predict(predict), 'o', color='red')
plt.show()
我的graph.csv:
x,y
1,1
2,2
3,3
4,4
5,5
6,5.5
7,6
8,6.25
9,6.4
10,6.6
11,6.8
结果产生:
enter image description here
它显然产生了错误的预测;随着每个 x,y 应该增加。
我错过了什么?我尝试改变学位,但并没有变得更好。例如,当我使用度数 4 时,y 增加得非常快。

最佳答案

with each x, y should increase.


确实有正 线性 趋势到您的数据,如果您将线性回归量(即 1 次多项式)拟合到它,这就是您在样本数据之外的预测中会看到的:
enter image description here
但是你已经建模了 二次方回归量,因此它尽可能地将二次曲线拟合到这些点。您的模型正在学习数据中的轻微“弯曲”作为曲线中的静止点,因此当您向右延伸时,它会减小:
enter image description here
如果您认为这种行为显然是错误的,那么您必须对数据的分布有一些假设。如果是这样,您应该使用这些来驱动您的模型选择。

I tried changing degrees, but it doesn't get much better. When I use degree of 4 for example, y increases very very rapidly.


如果您认为二次函数不够灵活,无法映射数据的潜在趋势,则可以选择更高阶的多项式。但是多项式的行为可能会超出数据的极值范围:


Cubic
Quartic
quintic


立方体
四次
昆蒂克


如您所见,多项式越复杂,它对特定数据点样本的确切趋势建模的灵活性就越大,但它超出数据范围的概括性越差。
这被称为 overfitting .
有很多策略可以避免这种情况,例如:
  • 收集更多数据
  • 为您的数据添加噪音
  • 添加正则化项
  • 选择更简单的模型

  • 在这种情况下,最简单的方法是后者 - 如果您怀疑您的数据遵循线性趋势, 为其拟合线性模型 .

    关于python - PolynomialFeatures 和 LinearRegression 返回不需要的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66735039/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com