Python LogisticRegression 训练模型并计算AUC值:解决样本数量不一致错误

以下代码展示了使用 Python 中的 LogisticRegression 模型训练数据,并计算 AUC 值的过程:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split

# 读取数据
data = pd.read_csv('题目2训练数据.txt', header=None, sep='	')
test_data = pd.read_csv('题目2测试数据.txt', header=None, sep='	')

# 分离特征和标签
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
X_test = test_data.values

# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)

# 预测验证集和测试集
pred_val = clf.predict_proba(X_val)[:, 1]
pred_test = clf.predict_proba(X_test)[:, 1]

# 计算AUC值
auc_tra = roc_auc_score(y_train, clf.predict_proba(X_train)[:, 1])
print('训练集上的 AUC是:', auc_tra)
auc_val = roc_auc_score(y_val, pred_val)
print('验证集上的 AUC是:', auc_val)

# 将测试集的预测结果输出到result.txt文件中
with open('result.txt', 'w') as f:
    f.write(','.join([f'{i:.2f}' for i in pred_test]))

错误分析:

代码在 auc_tra = roc_auc_score(y_train, pred_test) 处显示 ValueError: Found input variables with inconsistent numbers of samples: [22397, 2001],这个错误提示意思是输入的变量样本数量不一致,其中 y_train 有 22397 个样本,而 pred_test 有 2001 个样本。这是因为在计算 AUC 值时,应该使用训练集的预测结果 pred_train 而不是测试集的预测结果 pred_test

解决方案:

auc_tra = roc_auc_score(y_train, pred_test) 修改为 auc_tra = roc_auc_score(y_train, clf.predict_proba(X_train)[:, 1]) 即可。

修改后的代码:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split

# 读取数据
data = pd.read_csv('题目2训练数据.txt', header=None, sep='	')
test_data = pd.read_csv('题目2测试数据.txt', header=None, sep='	')

# 分离特征和标签
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
X_test = test_data.values

# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)

# 预测验证集和测试集
pred_val = clf.predict_proba(X_val)[:, 1]
pred_test = clf.predict_proba(X_test)[:, 1]

# 计算AUC值
auc_tra = roc_auc_score(y_train, clf.predict_proba(X_train)[:, 1])
print('训练集上的 AUC是:', auc_tra)
auc_val = roc_auc_score(y_val, pred_val)
print('验证集上的 AUC是:', auc_val)

# 将测试集的预测结果输出到result.txt文件中
with open('result.txt', 'w') as f:
    f.write(','.join([f'{i:.2f}' for i in pred_test]))

通过修改代码,我们成功解决了样本数量不一致的错误,并计算出了训练集和验证集的 AUC 值。

Python LogisticRegression 训练模型并计算AUC值:解决样本数量不一致错误

原文地址: https://www.cveoy.top/t/topic/nRUg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录