前言

本文主要使用python的sklearn库进行线性回归分析和预测,用到的文件有:LinearRegression_Training.csv和LinearRegression_Scoring.csv,分别作为训练数据和待预测数据。

数据文件下载:

代码

# 导入必要的库
import pandas as pd
import sklearn.preprocessing as preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split

# 预处理输入
# imp = SimpleImputer(missing_values=np.nan, strategy='mean')

# 预处理标签
le = preprocessing.LabelEncoder()

# 加载训练数据集
data = pd.read_csv("LinearRegression_Training.csv", sep=",", encoding="latin")

# 建模,确定输入输出
output = ["2nd_Heart_Attack"]
data = data[:-2]  # 舍弃无效行
train = data.drop(output, axis=1)
# 处理非数值数据
data['2nd_Heart_Attack'] = data['2nd_Heart_Attack'].replace('Yes', 1)
data['2nd_Heart_Attack'] = data['2nd_Heart_Attack'].replace('No', 0)
# print(train)

# 将数据集拆分为训练集和测试集
test_size = 0.1
X_train, X_test, y_train, y_test = train_test_split(train, data["2nd_Heart_Attack"], test_size=test_size, random_state=0)
# 考虑到接下来可能需要进行其他的操作,所以定了一个随机种子,保证接下来的train和test是同一组数

# 数据预处理

# 创建线性回归模型
model = LinearRegression()

# 在训练集上训练模型
model.fit(X_train, y_train)
#print(X_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算模型的性能指标
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'test_size: {test_size}\nMean Squared Error: {mse}\nR^2: {r2}')

# 使用所有训练数据进行训练
model.fit(train, data['2nd_Heart_Attack'])

# 加载新的数据集
data = pd.read_csv("LinearRegression_Scoring.csv", sep=",")
# 在新的数据集上进行预测
y_pred = model.predict(data)
# 根据规则计算预测结果
y = []
for i, j in enumerate(y_pred):
    if j > 0.5:
        y.append('Yes')
    else:
        y.append('No')

# 合并结果并写入文件
data['2nd_Heart_Attack'] = y
pd.DataFrame(data).to_csv('result.csv')

结果分析

2023-11-11T05:24:12.png

从以上结果可以看出,我们采用训练数据中90%的数据进行训练,10%的数据进行测试时,均方差仅0.02左右,拟合优度在0.90左右,说明线性拟合效果较好,可以使用该模型进行预测。

接下来我们使用所有的训练数据进行训练,再使用模型去预测新的数据,由于之前定义0为’No’,1为’Yes’,所以最后整理结果时采用大于0.5的预测结果设置为’Yes’, 小于0.5的结果设置为’No’。最后再合成结果,写入新的文件result.csv。如图:

2023-11-11T05:25:07.png

2023-11-11T05:25:37.png

最后修改:2023 年 11 月 11 日
如果觉得我的文章对你有用,请随意赞赏