采用sklearn.datasets 中的 load_diabetes数据实现线性回归,并比较不同算法间的效果 x_train,是375X10,y_train是375X1----注意 L1和L2正则结合-----elastic net
#coding:utf-8 import numpy as np from sklearn.datasets import load_diabetes from sklearn.utils import shuffle import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet from mpl_toolkits.mplot3d import Axes3D diabetes = load_diabetes() data = diabetes.data target = diabetes.target # 打乱数据 x, y = shuffle(data, target, random_state=13) x = x.astype(np.float32) # print(x) # print(y) # 训练集与测试集的简单划分 # print("x.shape[1]:%s"%x.shape[1]) # print("x.shape[0]:%s"%len(x)) offset = int(x.shape[0] * 0.9) # offset=397 print("offset:%s" % offset) x_train, y_train = x[:offset], y[:offset] # print("y_train :%s"%y_train) print("x_train.shape[1]:%s"%x_train.shape[1]) print("x_train.shape[0]:%s"%x_train.shape[0]) # print("y_train.shape[1]:%s"%y_train.shape[1]) print("y_train.shape[0]:%s"%y_train.shape[0]) x_test, y_test = x[offset:], y[offset:] y_train = y_train.reshape(-1, 1) y_test = y_test.reshape(-1, 1) # print("x_train:%s" %x_train) #建立模型 # model = LinearRegression() # model = Ridge(alpha=10) # # model = Lasso() model = ElasticNet() #开始训练 model.fit(x_train,y_train) #测试 predict = model.predict(x_test) print('predict:',predict) print('y_test:',y_test) num=0 for i in range(len(y_test)): if abs(predict[i] - y_test[i]) <20 : num +=1 print("num:",num) print("预测率:%s"%(num/len(y_test))) #结果显示 # w=[] print("coefficients:",model.coef_) w = model.coef_[0] print("intercept:",model.intercept_) b = model.intercept_ # f = b + w[0]*x_train[:,0] +w[1]*x_train[:,1]+ f = b + x_train*w # print(f) # f = x_test.dot(params['w']) + params['b'] # #画出三维的图---上面的图形是画不出来的,但是可以找两个特征练习下画图 # ax = plt.figure().add_subplot(111,projection = '3d') # ax.scatter(x_train[:,0], x_train[:,1],y_train,c='r',marker = 'o',linewidths =5) # x0 ,x1 = np.meshgrid(x_train[:,0],x_train[:,1]) # print(x0.shape[0]) # z=b +w[0]*x0 + w[1]*x1 # ax.plot_surface(x0,x1,z,color='k') # # ax.set_xlabel('X') # ax.set_ylabel('Y') # ax.set_zlabel('Z') # plt.show()预测率:0.15555555555555556 coefficients: [ 0.48183054 0. 3.16947865 2.26175737 0.53147483 0.28380996 -2.00421047 2.27453828 3.13156366 1.83652723] intercept: [ 151.72015381]
使用# model = LinearRegression() # model = Ridge(alpha=10)时: 预测率:0.17777777777777778
使用model = Lasso()时 预测率:0.2