Python LogisticRegression 训练模型并计算AUC值:解决样本数量不一致错误
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 值。
原文地址: https://www.cveoy.top/t/topic/nRUg 著作权归作者所有。请勿转载和采集!