算法实战 一.线性回归

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)

参数说明:

fit_intercept: 布尔型,默认为true

说明:是否对训练数据进行中心化。如果该变量为false,则表明输入的数据已经进行了中心化,在下面的过程里不进行中心化处理;否则,对输入的训练数据进行中心化处理

normalize:布尔型,默认为false

说明:是否对数据进行标准化处理

copy_X:布尔型,默认为true

说明:是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上)

n_jobs:整型, 默认为None

说明:计算时设置的任务个数(number of jobs)。None表示1,如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。

属性:

coef_ :数组型变量, 形状为(n_features,)或(n_targets, n_features)

说明:对于线性回归问题计算得到的feature的系数。如果输入的是多目标问题,则返回一个二维数组(n_targets, n_features);如果是单目标问题,返回一个一维数组 (n_features,)。

intercept_ :数组型变量

说明:线性模型中的独立项,即截距。

方法:

fit(X, y, sample_weight=None): 对训练集X, y进行训练。

get_params(deep=True): 得到该估计器(estimator)的参数。

predict(X): 使用训练得到的估计器对输入为X的集合进行预测(X可以是测试集,也可以是需要预测的数据)。

score(X, y, sample_weight=None): 返回对于以X为samples,以y为target的预测效果评分。
评价指标为
R 2 = 1 − ( ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 ) / m ( ∑ i = 1 m ( y ( i ) − μ ) 2 ) / m R^2=1-\frac{(\sum^m_{i=1}(y^{(i)}-\hat y^{(i)})^2)/m}{(\sum^m_{i=1}(y^{(i)}-\mu)^2)/m} R2=1(i=1m(y(i)μ)2)/m(i=1m(y(i)y^(i))2)/m
其中 μ 为 y ( i ) 的 均 值 \mu为y^{(i)}的均值 μy(i),该公式后半部分分子为均方误差,分母则为方差。

set_params(**params): 设置估计器的参数

调包实践

参考:https://www.jianshu.com/p/089e9f108e4b

房价预测

数据导入

使用sklearn自带的数据集,通过sklearn.datasets导入boston房价数据集

from sklearn.datasets import load_boston
boston = load_boston()

可以通过DESCR属性查看数据集的详细情况,数据有14列,前13列为特征,最后一列为标签数据

print(boston.DESCR)

算法实战 一.线性回归_第1张图片

boston的data和target分别存储了特征和标签

boston.data

算法实战 一.线性回归_第2张图片

boston.target

算法实战 一.线性回归_第3张图片

切分数据集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(boston.datasets, boston.target, test_size=0.2, random_state=2)

数据预处理

普通线性回归模型太简单,容易欠拟合,我们可以提高多项式的阶数来更好地拟合数据。在sklearn中,通过preprocessing模块中的PolynomialFeatures来提高特征多项式的阶数。

参数:
degree:多项式的阶数,默认为2
include_bias:默认为True,包含一个偏置列,也就是用作线性模型中的截距项,这里选择False,因为在线性回归中,可以设置是否需要截距项。

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
X_train_poly=poly.fit_transform(X_train)
X_test_poly=poly.fit_transform(X_test)

模型训练与评估

简单线性回归

from sklearn.linear_model import LinearRegression

model = LinearRegression(normalize=True)
model.fit(X_train, y_train)
model.score(X_test, y_test)

# result
# 0.77872098747725804

2阶多项式线性回归

model2 = LinearRegression(normalize=True)
model2.fit(X_train_poly, y_train)
model2.score(X_test_poly, y_test)

# result
# 0.895848854203947

总结

提高多项式的阶数,可以在训练集上有很好的效果,但容易过拟合。

你可能感兴趣的:(算法实战 一.线性回归)