oder()
# 2、给出标记
input_classes=['abc','egf','opq','rst','bcd','cde']
# 3、为标记编码,按第一个字母顺序为标记排编号,从0开始
label_encoder.fit(input_classes)
for i,item in enumerate(label_encoder.classes_):
print(item,'->',i)
# 4、转换标记,将给出的标记变为排序标号
label=['rst','opq','abc','rst','opq','abc']
encoded_labels=label_encoder.transform(label)
print(label,encoded_labels)
# 5、反转标记,将给出的数字,对应出标记
encoded_label=[4,3,2,4,1]
labels=label_encoder.inverse_transform(encoded_label)
print(encoded_label,labels)
3、线性回归器
import numpy as np
# 创建线性回归器 目的:提取输入变量与输出变量的关联线性模型,可以使得实际输出与线性方程预
# 测的输出的差平方和(sum of squares of differences)最小化,该方法称普通最小二乘法(Ordinary Least Squares,OLS)
# 1、获取数据并解析数据到变量X和Y中
X=[]
Y=[]
with open('data_singlevar.txt','r') as f:
for line in f.readlines():
data = [float(i) for i in line.split(',')]
xt,yt=data[:-1],data[-1]
X.append(xt)
Y.append(yt)
# 2、将数据分为训练集和测试集,各为80%,20%
num_training=int(0.8*len(X))
num_test=len(X)-num_training
X_training=np.array(X[0:num_training])
Y_training=np.array(Y[0:num_training])
X_test=np.array(X[num_training:])
Y_test=np.array(Y[num_training:])
# 3、创建回归器对象
from sklearn import linear_model
linear_regressor=linear_model.LinearRegression()
linear_regressor.fit(X_training,Y_training)#训练
# 4、获取预测数据,并将其显示
import matplotlib.pyplot as plot
y_train_pred=linear_regressor.predict(X_training)
plot.figure()
plot.scatter(X_training,Y_training,color='green')
plot.plot(X_training,y_train_pred,color='black')
plot.title('数据显示')
plot.show()
# 5、验证测试数据,并显示
y_test_pred=linear_regressor.predict(X_test)
plot.figure()
plot.scatter(X_test,Y_test,color='green')
plot.plot(X_test,y_test_pred,color='black')
plot.title('数据显示')
plot.show()
4、计算回归准确性
评价回归器的拟合效果,简述几个衡量回归器效果的重要指标(metric):
- 平均绝对误差(mean absolute error):所有数据点的绝对误差平均值。
- 均方误差(mean squared error):所有点的误差的平方的平均值(常用)。
- 中位数军队误差(median absolute error):所有点的误差的中位数。优点是可以消除异常值的干扰
- 解释方差分(explained variance acore):用于衡量模型对数据集波动的解释能力。
R方得分(R2 score):确定性关系系数,用于衡量模型对未知样本预测的效果,最好1.0,值也可负数。
scikit-learn里面有一块模块,提供了计算所有指标的功能。
import sklearn.metrics as sm
print('平均绝对误差:',round(sm.mean_absolute_error(Y_test,y_test_pred)))
print('均方误差:',round(sm.mean_squared_error(Y_test,y_test_pred)))
print('中位数绝对误差:',round(sm.median_absolute_error(Y_test,y_test_pred)))
print('解释方差分:',round(sm.explained_variance_score(Y_test,y_test_pred)))
print('R方得分:',round(sm.r2_score(Y_test,y_test_pred)))
通常尽量保证均方误差最低,而解释方差分最高
5、保存模型
模型训练结束之后,为下次使用方便,可以保存模型。
# 保存模型
import pickle as p
with open('saved_model_output.pkl','wb') as f:
p.dump(linear_regressor,f)
#加载模型,加载的便是linear_regressor
with open('saved_model_output.pkl','rb') as f:
model_liner=p.load(f)
y_pre=model_liner.predict(X_test)
6、岭回归器
普通最小二乘法在建模时会考虑异常值的影响,所以使得模型不是最优,这里引入正则化项的系数作为阙值来消除异常值影响,该方法称岭回归。
#alpha趋于0时,岭回归器就是普通最小乘法的线性回归器,若希望对异常值不敏感,设为大一点
ridge_regressor=linear_model.Ridge(alpha=1,fit_intercept=True,max_iter=10000)
ridge_regressor.fit(X_training,Y_training)
y_test_pred_ridge=ridge_regressor.predict(X_test)
plot.figure()
plot.scatter(X_test,Y_test,color='green')
plot.plot(X_test,y_test_pred_ridge,color='black')
plot.title('train数据显示')
plot.show()
print('平均绝对误差:',round(sm.m