用于多项式回归的 GridsearchCV

Posted

技术标签:

【中文标题】用于多项式回归的 GridsearchCV【英文标题】:GridsearchCV for Polynomial Regression 【发布时间】:2018-05-05 00:26:25 【问题描述】:

我是机器学习的新手,一直坚持下去。

当我尝试在线性模型中实现多项式回归时,例如使用多项式范围(1,10)的多个次数并获得不同的 MSE。我实际上使用GridsearchCV 方法来找到多项式的最佳参数。

from sklearn.model_selection import GridSearchCV

poly_grid = GridSearchCV(PolynomialRegression(), param_grid, cv=10, scoring='neg_mean_squared_error')

我不知道如何获得上述PolynomialRegression() 估算器。我搜索的一种解决方案是:

import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline

def PolynomialRegression(degree=2, **kwargs):
    return make_pipeline(PolynomialFeatures(degree), LinearRegression(**kwargs))

param_grid = 'polynomialfeatures__degree': np.arange(10), 'linearregression__fit_intercept': [True, False], 'linearregression__normalize': [True, False]

poly_grid = GridSearchCV(PolynomialRegression(), param_grid, cv=10, scoring='neg_mean_squared_error')

但它甚至没有产生任何结果。

【问题讨论】:

【参考方案1】:

poly_grid = GridSearchCV...

只会声明和实例化网格搜索对象。您需要使用 fit() 方法提供一些数据来进行任何训练或超参数搜索。

类似这样的:

poly_grid.fit(X, y)

其中 X 和 y 是您的训练数据和标签。

请看the documentation:

fit(X, y=None, groups=None, **fit_params)[来源]

Run fit with all sets of parameters.

然后使用cv_results_ 和/或best_params_ 来分析结果。

请看下面给出的例子:

http://scikit-learn.org/stable/auto_examples/exercises/plot_cv_diabetes.html http://scikit-learn.org/stable/auto_examples/model_selection/plot_randomized_search.html http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

回复评论:

@BillyChow 你是否打电话给poly_grid.fit()?如果不是,那么显然它不会产生任何结果。

如果是,那么根据您的数据,这将花费很多时间,因为您在参数中指定了从 1 到 10 的度数和 10 倍 cv。因此,随着度数的增加,拟合和交叉验证的时间会很快增加。

如果你想查看工作,你可以添加 verbose 参数到 gridSearchCV,像这样:

poly_grid = GridSearchCV(PolynomialRegression(), param_grid, 
                         cv=10, 
                         scoring='neg_mean_squared_error', 
                         verbose=3) 

然后拨打poly_grid.fit(X, y)

【讨论】:

是的,我之前已经完成了这些步骤。但我要问的是如何在 gridsearchCV 中构建多项式分类器。或如何通过交叉验证集找到最佳多项式次数。 @BillyChow 请澄清“甚至没有产生任何结果”的意思 param_grid = 'polynomialfeatures__degree': [2,3,4,5], 'linearregression__fit_intercept': [True, False], 'linearregression__normalize': [True, False] ....then .... poly_grid = GridSearchCV(PolynomialRegression(), param_grid, cv=10, score='neg_mean_squared_error') @BillyChow 您为什么要投票并批准答案?与你的问题无关。【参考方案2】:

将 pandas 导入为 numpy:

import numpy as np
import pandas as pd

创建示例数据集:

df = pd.DataFrame(data='X': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
                        'Y': [1, 4, 9, 16, 25, 36, 49, 64, 81, 100], 
                        'Label': [1, 3, 10, 17, 23, 45, 50, 55, 90, 114])
X_train = df[['X', 'Y']]
y_train = df['Label']

在多项式回归中,您正在更改数据集特征的程度,也就是说,您实际上并没有更改超参数。因此,我认为使用 for 循环模拟 GridSearchCV 比使用 GridSearchCV 更好。在下面的代码中,列表 degrees 是要测试的度数。

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import cross_val_score 
degrees = [2, 3, 4, 5, 6] # Change degree "hyperparameter" here
normalizes = [True, False] # Change normalize hyperparameter here
best_score = 0
best_degree = 0
for degree in degrees:
    for normalize in normalizes:
        poly_features = PolynomialFeatures(degree = degree)
        X_train_poly = poly_features.fit_transform(X_train)
        polynomial_regressor = LinearRegression(normalize=normalize)
        polynomial_regressor.fit(X_train_poly, y_train)
        scores = cross_val_score(polynomial_regressor, X_train_poly, y_train, cv=5) # Change k-fold cv value here
        if max(scores) > best_score:
            best_score = max(scores)
            best_degree = degree
            best_normalize = normalize

打印最好成绩:

print(best_score)

0.9031682820376132

打印最佳超参数:

print(best_normalize)
print(best_degree)

False
2

使用最佳超参数创建最佳多项式回归:

poly_features = PolynomialFeatures(degree = best_degree)
X_train_poly = poly_features.fit_transform(X_train)
best_polynomial_regressor = LinearRegression(normalize=best_normalize)
polynomial_regressor.fit(X_train_poly, y_train)

【讨论】:

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

多项式回归的正态性检验

如何用matlab线性回归分析?

多项式回归

怎样用SPSS做二次多项式回归方程

回归-多项式回归算法

回归-多项式回归算法