filename = "Ve.txt" x = [] y = [] with open(filename, 'r') as f: for line in f.readlines(): xt,yt = [float(i) for i in line.split(',')] x.append(xt) y.append(yt) num_training = int(0.5 * len(x)) num_test = len(x) - num_training import numpy as np #百分之80的数据作为训练数据集,剩余百分之20用于测试数据集,创建 #x_train,y_train,x_test,y_test四个数组 #训练数据 x_train = np.array(x[:num_training]).reshape((num_training,1)) y_train = np.array(y[:num_training]) #测试数据 x_test = np.array(x[num_training:]).reshape((num_test,1)) y_test = np.array(y[num_training:]) #从sklearn库中导入linear_model方法 from sklearn import linear_model #创建回归器对象 linear_regressor = linear_model.LinearRegression() #使用训练集训练模型 linear_regressor.fit(x_train,y_train) ''' 首先从sklearn库中导入用于回归的方法linear_model,其中的目标值是输入变量的线性组合 ;然后调用函数LinearRegression(),执行普通最小二乘法线性回归;最后,调用fit()函数 拟合线性模型,这里传入了两个参数——训练数据x_train和目标值y_train ''' #模型在训练数据上的预测: y_train_pred = linear_regressor.predict(x_train) #使用库matplotlib绘制输出结果 import matplotlib.pyplot as plt 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.figure() 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() #用回归准确率估计线性回归模型的性能 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("Explain variance score =",round(sm.explained_variance_score(y_test,y_test_pred),2)) #R方得分:确定性相关系数,用于衡量未知样本的预测效果 print("R2 score =", round(sm.r2_score(y_test,y_test_pred),2)) ''' sklearn.metrics模块包含了衡量预测误差的一系列函数: 1.以_score结尾的函数返回的是需要最大化的值,值越大表示模型的泛化能力越强 2.以_error或_loss结尾的函数返回的是需要最小化的值,值越小表示的模型的泛化能力越强 ''' #python模型持久化的方法 #将回归器对象保存在文件3_model_linear_regr.pkl中 ''' import pickle output_model_file = "3_model_linear_regr.pkl" with open(output_model_file, 'wb') as f: pickle.dump(linear_regressor, f) ''' #将回归器对象从文件中加载到model_linregr变量中 ''' with open(output_model_file, "rb") as f: model_linregr = pickle.load(f) y_test_pred_new = model_linregr.predict(x_test) print("New mean absolute error =",round(sm.mean_absolute_error(y_test, y_test_pred), 2)) ''' ''' pickle模块可以将任意的python对象转换成字节序列,这一过程又称为对象的序列化, 可以发送或存储表示对象的字节流,然后创建具有相同特征的新对象,这一反向操作成为解包 '''