监督学习:有标记
非监督学习:无标记
1.线性回归
线性回归的目标是提取输入变量与输出变量的关联线性模型,这就要求实际输出与线性方程预测的输出的残差平方和(sum of squares of differences)最小化。这种方法被称为普通最小二乘法(Ordinary Least Squares, OLS)
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)