概述
理论推导
线性回归算法
实验步骤
1 安装并引入必要的库
!pip install numpy==1.16.0
!pip install scikit-learn==0.22.1
import numpy as np
from sklearn import datasets, linear_model, model_selection
2 数据分析处理
2.1 加载数据
我们需要从sklearn的datasets导入数据集并对数据集命名:
diabetes = datasets.load_diabetes()
现在我们来看看diabetes数据集的类型和数据。 该类型应该是’Bunch’,它是一个类似于字典的对象,特别适用于加载sklearn内部示例数据集:
print(type(diabetes))
print(diabetes)
让我们来看看这个数据集的描述(description)了解更多的信息:
print(diabetes.DESCR)
让我们来看看这个数据集的样本特征集和样本标签:
print('******data******')
print(diabetes.data)
print('******target******')
print(diabetes.target)
让我们来看看这个数据集的样本特征集和样本标签的形状。 注意,样本特征集的形状是一个元组:
print (diabetes.data.shape)
print (diabetes.target.shape)
2.2 拆分数据
利用model_seletion模块中的train_test_split函数,用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集样本、测试集样本、训练集标签、测试集标签,并分别被定义为:X_train, X_test, y_train, y_test:
X_train, X_test, y_train, y_test = model_selection.train_test_split(diabetes.data,diabetes.target,test_size=0.25, random_state=0)
参数解释:
- diabetes.data:被划分的diabetes样本特征集
- diabetes.target: 被划分的样本标签
- test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量
- random_state:是随机数的种子
让我们来看看训练集样本X_train、测试集样本X_test、训练集标签y_train、测试集标签y_test:
print('######X_train######')
print(X_train)
print('######X_test######')
print(X_test)
print('######y_train######')
print(y_train)
print('######y_test######')
print(y_test)
让我们来看看训练集样本X_train、测试集样本X_test、训练集标签y_train、测试集标签y_test的形状:
print('######X_train######')
print(X_train.shape)
print('######X_test######')
print(X_test.shape)
print('######y_train######')
print(y_train.shape)
print('######y_test######')
print(y_test.shape)
3 拟合预测
3.1 线性回归模型
现在创建一个名为regr的LinearRegression实例:
regr = linear_model.LinearRegression()
利用regr模型训练X_train和y_train:
regr.fit(X_train, y_train)
回归评价:
print('Coefficients:%s, intercept %s' % (regr.coef_,regr.intercept_))
print("Residual sum of squares: %.2f"% np.mean((regr.predict(X_test) - y_test) ** 2))
print('Score: %.2f' % regr.score(X_test, y_test))
3.2 岭回归
现在创建一个名为regr_R的Ridge实例:
regr_R = linear_model.Ridge()
利用regr_R模型训练X_train和y_train:
regr_R.fit(X_train, y_train)
回归评价:
print('Coefficients:%s, intercept %s'%(regr_R.coef_,regr_R.intercept_))
print("Residual sum of squares: %.2f"% np.mean((regr_R.predict(X_test) - y_test) ** 2))
print('Score: %.2f' % regr_R.score(X_test, y_test))