[scikit-learn] 糖尿病严重程度预测模型 —— 多元线性回归
简介
scikit-learn(简称sklearn)是一个广泛使用的Python库,它提供了许多机器学习、数据挖掘和数据分析的工具。
LinearRegression模型是sklearn中实现线性回归算法的一个具体类,为线性回归模型训练及预测提供了便捷的API。
作为模型训练入门案例,本项目选用sklearn库自带的糖尿病严重程度数据集为源数据,使用LinearRegression模型进行拟合,并对模型进行评估。
简单线性回归
简单线性回归(Simple Linear Regression) 是统计学中最基础的预测模型之一,用于分析一个自变量(X)和一个因变量(Y)之间的线性关系。一般具有以下关键特点:
-
线性关系:简单线性回归假设两个变量之间存在线性关系,即它们可以被一条直线很好地拟合。
-
模型表达式:
简单线性回归模型通常表示为:\(Y = \beta_0 + \beta_1X + \epsilon\)
- ( Y ):因变量(Dependent Variable),我们想要预测或解释的变量。
- ( X ):自变量(Independent Variable),用来预测因变量的变量。
- ( \(\beta_0\) ):截距项(Intercept),当 ( X = 0 ) 时,( Y ) 的期望值。
- ( \(\beta_1\) ):斜率(Slope),表示 ( X ) 每变化一个单位,( Y ) 预期将如何变化。
- ( \(\epsilon\) ):误差项(Error Term),表示模型无法解释的随机变异。
-
参数估计:通过最小化误差项 ( \(\epsilon\) ) 的平方和(即最小二乘法),可以估计出截距 ( \(\beta_0\) ) 和斜率 ( \(\beta_1\) )。
-
模型拟合优度:通常使用 R²(决定系数)来衡量模型的拟合优度,R² 的值介于 0 到 1 之间,值越接近 1 表示模型的解释能力越强。
运行结果
Full Code
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression
diabetes = datasets.load_diabetes()
'''
age: 年龄(以年为单位)
sex: 性别
bmi: 体重指数(Body Mass Index)
bp: 平均血压(Blood Pressure)
s1: 总血清胆固醇(Total Serum Cholesterol,tc)
s2: 低密度脂蛋白(Low-Density Lipoproteins,ldl)
s3: 高密度脂蛋白(High-Density Lipoproteins,hdl)
s4: 总胆固醇与高密度脂蛋白的比值(Total Cholesterol / HDL,tch)
s5: 血清甘油三酯水平的可能对数值(Log of Serum Triglycerides Level,ltg)
s6: 血糖水平(Blood Sugar Level,glu)
'''
column_names = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
X = diabetes.data # data
y = diabetes.target # target
# 行列数
n, m = X.shape
# 打乱数据,筛选80%作为训练数据
indexes = np.arange(n)
np.random.shuffle(indexes)
train_cnt = int(0.8 * n)
X_train, y_train = X[indexes[:train_cnt]], y[indexes[:train_cnt]]
X_test, y_test = X[indexes[train_cnt:]], y[indexes[train_cnt:]]
# 建模
model = LinearRegression(fit_intercept=True)
model.fit(X_train, y_train)
print("W (斜率):", model.coef_)
print("b (截距):", model.intercept_)
print("模型得分 (越接近1,拟合度越高) :", model.score(X_test, y_test))