1.3 sklearn中的preprocessing.PolynomialFeatures——多项式回归

1147-柳同学

发表文章数:589

首页 » 算法 » 正文

PolynomialFeatures介绍

PolynomialFeatures用来生成关于X的矩阵,其中degree表示多项式的次数,include_bias默认为True,表示会包含1
使用多项式的方法,来对特征进行构造;如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2)

from sklearn.preprocessing import  PolynomialFeatures

sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False,
 include_bias=True, order='C')

 - Parameters(参数)
	degree : int, default=2
	多项式特征的次数

	interaction_only : bool, default=False
	如果指定为True,那么就不会有特征自己和自己结合的项,上面的二次项中没有a^2和b^2

	include_bias : bool, default=True
	如果为True(默认值),则包含一个bias列,如果为True的话,那么就会有上面的 1那一项。

	order : {‘C’, ‘F’}, default=’C’
	密集情况下输出数组的顺序。“F”阶的计算速度更快,但可能会降低后续估计的速度。

 - Attributes(属性)
 	powers_ : ndarray of shape (n_output_features, n_input_features)
 	powers_[i, j]是第i个输出中第j个输入的指数。

	n_input_features_ : int
	输入特征的总数

	n_output_features_ : int
	多项式输出特征的总数。输出特征的数量是通过迭代输入特征的所有适当大小的组合来计算的。

 - Methods(方法)
	fit(X[, y])
	计算输出特征的数量

	fit_transform(X[, y])
	适应数据,然后转换它

	get_feature_names([input_features])
	返回输出特征的特征名
	
	get_params([deep])
	获取该估计器的参数

	set_params(**params)
	为该估计器设置参数

	transform(X)
	将数据转换为多项式特征

官方案例

>>> import numpy as np
>>> from sklearn.preprocessing import PolynomialFeatures
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> poly = PolynomialFeatures(2)
>>> poly.fit_transform(X)
(1,a,b,a^2,ab,b^2)
array([[ 1.,  0.,  1.,  0.,  0.,  1.],
       [ 1.,  2.,  3.,  4.,  6.,  9.],
       [ 1.,  4.,  5., 16., 20., 25.]])
>>> poly = PolynomialFeatures(interaction_only=True)
>>> poly.fit_transform(X)
(1,a,b,ab)
array([[ 1.,  0.,  1.,  0.],
       [ 1.,  2.,  3.,  6.],
       [ 1.,  4.,  5., 20.]])

波士顿房价预测

# 波士顿房价预测
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import warnings
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import ElasticNetCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.metrics import mean_squared_error, r2_score

# 设置随机数种子
np.random.seed(1)


# 获取数据
def loaddata():
    data = load_boston()
    X = np.array(data.data)  # 特征值
    y = np.array(data.target).reshape(-1, 1)  # 目标值
    return X, y


if __name__ == '__main__':
    # 消除警告
    warnings.filterwarnings(action='ignore')
    # 设置精度
    np.set_printoptions(suppress=True)
    # 加载数据
    X, y = loaddata()
    # 数据集分割
    # random_state为随机数种子,为0时,产生不同的随机数
    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=0)

    # 线性模型
    model = Pipeline([
        ('ss', StandardScaler()),
        ('poly', PolynomialFeatures(degree=3, include_bias=True)),
        ('linear', ElasticNetCV(alphas=np.logspace(-3, 2, 10),
                                l1_ratio=(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1),
                                fit_intercept=False, cv=3))
    ])
    # 拟合模型
    model.fit(X_train, y_train)
    # 获得模型的参数
    linear = model.get_params('linear')['linear']
    print('超参数 =', linear.alpha_)
    print('l1_ratio_ = ', linear.l1_ratio_)

    # 预测
    order = y_test.argsort(axis=0)
    y_test = y_test[order].reshape(len(y_test),-1)
    X_test = X_test[order, :].reshape(len(y_test),-1)
    y_ev_pred = model.predict(X_test)
    # 评价
    print('ElasticNet MSE=', mean_squared_error(y_test, y_ev_pred.reshape(-1,1)))
    print('ElasticNet R2=', r2_score(y_test, y_ev_pred))

    # 画图
    mpl.rcParams['font.sans-serif'] = [u'simHei']
    mpl.rcParams['axes.unicode_minus'] = False

    t = np.arange(len(y_test))  # 样本编号
    fig = plt.figure(facecolor='w')
    fig.subplots()
    plt.plot(t, y_test, 'r-', lw=2, label=u'真实值')
    plt.plot(t, y_ev_pred, 'b-', lw=2, label=u'估计值')
    plt.legend(loc='best')
    plt.title('波士顿房价预测', fontsize=18)
    plt.xlabel('样本编号', fontsize=15)
    plt.ylabel('房屋价格', fontsize=15)
    plt.grid()
    plt.show()

1.3 sklearn中的preprocessing.PolynomialFeatures——多项式回归

未经允许不得转载:作者:1147-柳同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《1.3 sklearn中的preprocessing.PolynomialFeatures——多项式回归》 发布于2021-01-06

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录