使用 Python 进行多元多项式回归

Posted

技术标签:

【中文标题】使用 Python 进行多元多项式回归【英文标题】:Multivariate polynomial regression with Python 【发布时间】:2019-07-20 09:03:49 【问题描述】:

最近我开始学习 sklearn、numpy 和 pandas,并为多元线性回归做了一个函数。我想知道,是否可以进行多元多项式回归?

这是我的多元多项式回归代码,它显示了这个错误:

in check_consistent_length " samples: %r" % [int(l) for l in lengths])
ValueError: Found input variables with inconsistent numbers of samples: [8, 3]

你知道是什么问题吗?

import numpy as np
import pandas as pd
import xlrd
from sklearn import linear_model
from sklearn.model_selection import train_test_split

def polynomial_prediction_of_future_strenght(input_data, cement, blast_fur_slug,fly_ash,
                                              water, superpl, coarse_aggr, fine_aggr, days):

    variables = prediction_accuracy(input_data)[4]
    results = prediction_accuracy(input_data)[5]

    var_train, var_test, res_train, res_test = train_test_split(variables, results, test_size = 0.3, random_state = 4)

    Poly_Regression = PolynomialFeatures(degree=2)
    poly_var_train = Poly_Regression.fit_transform(var_train)
    poly_var_test = Poly_Regression.fit_transform(var_test)

    input_values = [cement, blast_fur_slug, fly_ash, water, superpl, coarse_aggr, fine_aggr, days]

    regression = linear_model.LinearRegression()
    model = regression.fit(poly_var_train, res_train)

    predicted_strenght = regression.predict([input_values])
    predicted_strenght = round(predicted_strenght[0], 2)

    score = model.score(poly_var_test, res_test)
    score = round(score*100, 2)


    print(prediction, score)

a = polynomial_prediction_of_future_strenght(data_less_than_28days, 260.9, 100.5, 78.3, 200.6, 8.6, 864.5, 761.5, 28)

【问题讨论】:

【参考方案1】:

您可以使用 this sklearn 模块将您的特征转换为多项式,然后在线性回归模型中使用这些特征。

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

poly = PolynomialFeatures(degree=2)
poly_variables = poly.fit_transform(variables)

poly_var_train, poly_var_test, res_train, res_test = train_test_split(poly_variables, results, test_size = 0.3, random_state = 4)

regression = linear_model.LinearRegression()

model = regression.fit(poly_var_train, res_train)
score = model.score(poly_var_test, res_test)

此外,在您的代码中,您在整个数据集上训练您的模型,然后将其拆分为训练和测试。这意味着您的模型在训练时已经看到了您的测试数据。您需要先拆分,然后仅在训练数据上训练模型,然后在测试集上测试分数。我也包含了这些更改。 :)

【讨论】:

谢谢我的朋友,但我不明白你的意思:“在你的代码中,你在整个数据集上训练你的模型,然后你把它分成训练和测试。这意味着你的模型已经看到训练时的测试数据。” .我发布的代码有问题吗? 当你在一段数据上训练你的模型时,你必须确保它也适用于其他看不见的数据。这就是为什么我们首先将数据集拆分为训练和测试。这样当我们可以在训练数据集上训练它并检查它在测试数据上的表现时(它在训练时不会遇到)。您在拆分之前训练模型,这意味着在训练时它会遇到所有数据。您的 model.score(var_test, res_rest) 不是评估模型性能的准确指标。 谢谢,我明白了,但是我的多元回归代码还是有问题,请查看问题,我已经更新了 看起来您可能需要重新调整输入数据。你到底在哪里得到错误?尝试检查your_data.shape,如果它类似于(n,),那么你将不得不做your_data.reshape((n, 1)) 当我想调用函数时,最后一行代码出错。我从包含 9 列的 excel 文件中获取数据(8 列带有参数,1 列带有结果),然后我用 pandas 读取它。我作为 input_data 传入函数的数据适用于我使用多元线性回归的函数。【参考方案2】:

不太清楚您所说的“是否可以进行多元多项式回归”是什么意思,但是localreg Python 库中提供了一个预制的非 sklearn 解决方案(完全披露:我做到了)。

【讨论】:

以上是关于使用 Python 进行多元多项式回归的主要内容,如果未能解决你的问题,请参考以下文章

机器学习系列6 使用Scikit-learn构建回归模型:简单线性回归多项式回归与多元线性回归

scikit-learn : 线性回归,多元回归,多项式回归

scikit-learn : 线性回归,多元回归,多项式回归

R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等

如何用SPSS做多项Logistic回归

Coursera Machine Learning : Regression 多元回归