监督学习1——回归

监督学习:有标记

非监督学习:无标记

1.线性回归

线性回归的目标是提取输入变量与输出变量的关联线性模型,这就要求实际输出与线性方程预测的输出的残差平方和(sum of squares of differences)最小化。这种方法被称为普通最小二乘法Ordinary Least SquaresOLS

from sklearn.linear_model  import LinearRegression

# 创建线性回归对象
linear_regressor = LinearRegression()
# 用训练数据集训练模型
linear_regressor.fit(X_train, y_train)

#查看拟合效果

import matplotlib.pyplot as plt
y_train_pred = linear_regressor.predict(X_train)
plt.figure()
plt.scatter(X_train, y_train, color='green')
plt.plot(X_train, y_train_pred, color='black', linewidth=4)
plt.title('Training data')

plt.show()


用模型对测试数据集进行预测,然后画出来看看,代码如下所示:
y_test_pred = linear_regressor.predict(X_test)
plt.scatter(X_test, y_test, color='green')
plt.plot(X_test, y_test_pred, color='black', linewidth=4)
plt.title('Test data')
plt.show()

模型评估指标:

平均绝对误差( mean absolute error:这是给定数据集的所有数据点的绝对误差平均值。
均方误差( mean squared error:这是给定数据集的所有数据点的误差的平方的平均值。这是最流行的指标之一。
中位数绝对误差( median absolute error:这是给定数据集的所有数据点的误差的中位数。这个指标的主要优点是可以消除异常值(outlier)的干扰。测试数据集中的单个坏点不会影响整个误差指标,均值误差指标会受到异常点的影响。
解释方差分( explained variance score:这个分数用于衡量我们的模型对数据集波动的解释能力。如果得分1.0分,那么表明我们的模型是完美的。
R方得分( R2 score:这个指标读作“R,是指确定性相关系数,用于衡量模型对未知样本预测的效果。最好的得分是1.0,值也可以是负数。

值。
import sklearn.metrics as sm
print "Mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred), 2)
print "Mean squared error =", round(sm.mean_squared_error(y_test, y_ test_pred), 2)
print "Median absolute error =", round(sm.median_absolute_error(y_ test, y_test_pred),
2)
print "Explained variance score =", round(sm.explained_variance_ score(y_test,
y_test_pred), 2)
print "R2 score =", round(sm.r2_score(y_test, y_test_pred), 2)
通常的做法是尽量保证均方误差最低,而且解释方差分最高。

保存模型数据

import cPickle as pickle
output_model_file = 'saved_model.pkl'
with open(output_model_file, 'w') as f:
    pickle.dump(linear_regressor, f)

使用模型数据

with open(output_model_file, 'r') as f:
    model_linregr = pickle.load(f)
y_test_pred_new = model_linregr.predict(X_test)
print "\nNew mean absolute error =", round(sm.mean_absolute_ error(y_test,
y_test_pred_new), 2)


2.岭回归

线性回归的主要问题是对异常值敏感。在真实世界的数据收集过程中,经常会遇到错误的度量结果。而线性回归使用的普通最小二乘法,其目标是残差平方和最小化。这时,由于异常值误差的绝对值很大,因此会引起问题,从而破坏整个模型。为了避免这个问题,我们引入正则化项的系数作为阈值来消除异常值的影响。这个方法被称为岭回归

创建岭回归器:

ridge_regressor = linear_model.Ridge(alpha=0.01, fit_ intercept=True,max_iter=10000)

alpha参数控制回归器的复杂程度。当alpha趋于0时,岭回归器就是用普通最小二乘法的线性回归器。因此,如果你希望模型对异常值不那么敏感,就需要设置一个较大的alpha值。这里把alpha值设置为0.01

模型训练等与线性回归同。

3.多项式回归

当数据点本身的模式中带有自然的曲线时,而线性模型是不能捕捉到这一点的。多项式则可以,多项式模型的曲率是由多项式的次数决定的。随着模型曲率的增加,模型变得更准确。但是,增加曲率的同时也增加了模型的复杂性,因此拟合速度会变慢。

from sklearn.preprocessing import PolynomialFeatures
polynomial = PolynomialFeatures(degree=3) #degree为多项式次数
X_train_transformed = polynomial.fit_transform(X_train)
poly_linear_model = linear_model.LinearRegression()
poly_linear_model.fit(X_train_transformed, y_train)







猜你喜欢

转载自blog.csdn.net/u013344884/article/details/79490368
今日推荐