正规方程求解法、岭回归、线性回归解决糖尿病预测问题

一、问题描述

糖尿病预测糖尿病数据集是Sklearn 提供的数据集。它从442例糖尿病患者的资料中取10个特征:年龄、性别、体重、血压和6个血清测试量值,以及患者在一年后疾病发展的量化值(标签)。
糖尿病预测任务是:根据上述10个特征,预测病情发展的量化值。
请用线性回归算法完成糖尿病预测任务。

二、实验目的

1.采用自定义的线性回归算法(正规方程求解法)解决糖尿病预测问题。输出R2模型的的值。
2.采用自定义的岭回归算法解决糖尿病预测问题,输出R2模型的的值(下周做)。
3.采用Sklearn的 LinearRegression线性回归算法解决糖尿病预测问题。输出R2模型的的值。
4.比较3种算法的实验结果(用表格表示),并分析3种算法在思想上有什么不同。

三、实验内容

(1)正规方程算法

import sklearn.datasets
import numpy as np
import linear_regression as lib
from sklearn.model_selection import train_test_split

def process_features(X):
    m, n = X.shape
    X = np.c_[np.ones((m, 1)), X]
    return X

np.random.seed(100)
X, y = sklearn.datasets.load_diabetes(return_X_y=True)

# 1.正规方程求解法
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=5)
x_train = process_features(x_train)  # 特征处理
x_test = process_features(x_test)

model = lib.LinearRegression()
model.fit(x_train, y_train)  # 训练数据

y_pred = model.predict(x_test)
mse = lib.mean_squared_error(y_test, y_pred)  # h的均方误差
r2 = lib.r2_score(y_test, y_pred)  # R^2的决定系数
print("mse={}andr2={}".format(mse, r2))

运行结果:
在这里插入图片描述

(2)岭回归算法

import sklearn.datasets
import numpy as np
import linear_regression as lib
import ridge_regression as Rg
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split

def process_features(X):
    m, n = X.shape
    X = np.c_[np.ones((m, 1)), X]
    return X

np.random.seed(100)
X, y = sklearn.datasets.load_diabetes(return_X_y=True)

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=5)
polt = PolynomialFeatures(degree = 2)
x_poly = polt.fit_transform(x_train)            #特征处理
model = Rg.RidgeRegression(Lambda = 0.2)
model.fit(x_poly,y_train)                       #训练数据
x_test = polt.fit_transform(x_test)             #X特征标准化
y_pred = model.predict(x_test)                  #预测数据
mse = lib.mean_squared_error(y_test,y_pred)     #h的均方误差
r2 = lib.r2_score(y_test,y_pred)                #R^2的决定系数
print("mse={} and r2={}".format(mse,r2))

当λ值不同时,目标函数的均方误差和决定系数不同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)采用Sklearn的 LinearRegression线性回归算法解决糖尿病预测问题

import sklearn.datasets
import numpy as np
import linear_regression as lib
from sklearn import linear_model
from sklearn.model_selection import train_test_split


def process_features(X):
    m, n = X.shape
    X = np.c_[np.ones((m, 1)), X]
    return X

np.random.seed(100)
X, y = sklearn.datasets.load_diabetes(return_X_y=True)

#2.Scikit-learn
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=5)
x_train = process_features(x_train)         #特征处理
x_test = process_features(x_test)           #h的均方误差
clf = linear_model.LinearRegression()
clf.fit(x_train, y_train)                   #训练数据
y_pred=clf.predict(x_test)                  #预测数据
mse = lib.mean_squared_error(y_test,y_pred) #h的均方误差
r2 = lib.r2_score(y_test,y_pred)            #R^2的决定系数
print("mse={}andr2={}".format(mse,r2))

运行结果:
在这里插入图片描述

五、实验结果及分析

(1)对比正规方程算法和Sklearn的 LinearRegression线性回归算法
算法\数值 均方误差(mse) 决定系数(r2)
正规方程算法 3052.853258418155 0.5070180640403985
线性回归算法 3052.853258418156 0.5070180640403983
(2)由上表的数据可以看出,正规方程算法和Sklearn的 LinearRegression线性回归算法,这两种算法的模型拟合效果相似,决定系数都大于50%,说明模型的拟合效果比较理想。
(3)对于岭回归,根据运行结果可以看出,随着λ的增大,决定系数R2变得越来越小,岭回归的目标函数越来越偏离训练数据的均方误差,因此,求得岭回归的最优解在训练数据上的决定系数变得越来越小。

六、遇到的问题及解决办法

(1)如果特征处理之前未做标准化处理,特征矩阵X的首列(常数1)将被标准画成全0列,给正规方程求解带来了困难。因此,特征处理必须在标准化之后实施。
(2)正规方程具有两种局限性:第一,所选的特征之间相互不独立,或者训练数据的个数m小于特征的个数n,导致XTX不可逆;第二,时间复杂度比较大,对于求解特征较多的回归问题是无法接受的。

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值