线性回归模型简介

科技   2024-09-28 08:20   广东  

 今天是生信星球陪你的第995天


   

公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓

生信分析直播课程(9月30日下一期)

生信新手保护学习小组(10月初下一期)

单细胞陪伴学习小组(10月初下一期)

1.探索数据

import pandas as pd 
diabetes_df = pd.read_csv("diabetes_clean.csv"
print(diabetes_df.head())
diabetes_df.describe() 

除了第一列表示怀孕次数的可以是0,其他的指标不可能为0,所以其他列是0的行应该是缺失的,这样的行应当去掉。

后面只用到了glucose和bmi列,所以把这两列中的任意一列值为0的行去掉

cols_to_check = diabetes_df.iloc[:, [1,5]]
# 检查这些列中任意一列是否包含0
rows_to_drop = cols_to_check.eq(0).any(axis=1)

# 删除这些行
diabetes_df = diabetes_df[~rows_to_drop]
diabetes_df.shape
## (752, 9)

2.创建特征和目标数据

X = diabetes_df.drop("glucose", axis=1).values 
y = diabetes_df["glucose"].values  
print(type(X), type(y)) 
## <class 'numpy.ndarray'> <class 'numpy.ndarray'>

3.根据单一特征完成预测

X_bmi = X[:, 3
print(y.shape, X_bmi.shape) 
## (752,) (752,)
X_bmi = X_bmi.reshape(-11
print(X_bmi.shape) 
## (752, 1) 
# 也可以写作
X_bmi = diabetes_df.iloc[:,5].values.reshape(-1,1)

y是一维的没有问题,但X通常是多个特征,所以函数不允许X是一维数组的格式。

我找kimi讲解了一下.reshape(-1, 1) 的作用:

  • reshape(-1, 1)是NumPy数组的一个方法,用于改变数组的形状。
  • reshape(-1, 1)中的-1表示自动计算这一维的大小,以确保总元素数量不变。这里,它会自动计算出需要多少行,以使得数组的总元素数量与原始数组相同。
  • 1表示新的数组将只有一列。
  • 这行代码的作用是将X_bmi数组从一维数组转换为二维数组,其中每个元素都在自己的行中,即变为一个列向量。

举个例子,假设X是这样的数组:

[[ 0.0,  1.0,  2.0,  3.0],
[ 4.0, 5.0, 6.0, 7.0],
[ 8.0, 9.0, 10.0, 11.0]]

执行X_bmi = X[:, 3]后,X_bmi将是:

[3. 7. 11.]

然后执行X_bmi = X_bmi.reshape(-1, 1)后,X_bmi将变为:

[[ 3.],
[ 7.],
[11.]]

这样,X_bmi就从一个一维数组变成了一个二维数组,每个元素都在自己的行中。这种转换在机器学习中很常见,因为许多机器学习算法需要输入数据为二维数组的形式(即特征矩阵)。

4.把特征和目标变量画在散点图里

import matplotlib.pyplot as plt 
plt.scatter(X_bmi, y) 
plt.ylabel("Blood Glucose (mg/dl)"
plt.xlabel("Body Mass Index"
plt.show() 

5.拟合线性回归模型并可视化

from sklearn.linear_model import LinearRegression 
reg = LinearRegression() 
reg.fit(X_bmi, y) 
predictions = reg.predict(X_bmi) 
print(predictions[:5]) #查看前五个预测值
## [123.11892469 115.92280307 112.53034574 117.46482913 132.88508973]
plt.scatter(X_bmi, y) 
plt.plot(X_bmi, predictions) 
plt.ylabel("Blood Glucose (mg/dl)"
plt.xlabel("Body Mass Index"
plt.show()


生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章