You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用Sklearn Python获取模型预测目标值的出现占比?

问题分析与解决

问题描述

以train_1、train_2、train_3、train_4为特征,result_cor为目标变量训练机器学习模型,需要统计预测结果中值为1或2的出现占比,但现有代码运行后准确率始终为100.0%或0.0%,无法获取目标占比数据。

代码问题诊断

  1. 训练数据误用:模型训练时直接使用了完整数据集x和y,而非拆分后的训练集treino_x和treino_y,导致模型提前学习了所有数据信息,后续单一样本预测的准确率失去参考意义。
  2. 无效验证逻辑:手动修改训练集的首个样本并将其作为预测输入,同时把修改后的标签作为真实值计算准确率,这是在验证自定义的虚构数据,无法反映模型的实际性能。
  3. 缺失目标统计逻辑:代码中没有针对测试集的预测结果,统计1和2出现占比的相关逻辑。

修正后的代码

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np

sheet_id = '1CfnVwuqysTYNPKLVhgjJ44Af8VDcdN1l'
dados = pd.read_excel(f'https://docs.google.com/spreadsheets/export?id={sheet_id}&format=xlsx')

# 提取特征与目标变量
x = dados[['train_1','train_2','train_3','train_4']]
y = dados['result_cor']  # 转为Series格式更适配sklearn接口

# 拆分训练集与测试集(random_state保证结果可复现)
treino_x, teste_x, treino_y, teste_y = train_test_split(x, y, test_size=0.33, random_state=42)

# 初始化并训练模型
modelo = DecisionTreeClassifier()
modelo.fit(treino_x, treino_y)

# 对测试集进行预测
previsoes = modelo.predict(teste_x)

# 统计预测结果中1和2的占比
total_pred = len(previsoes)
count_1 = np.sum(previsoes == 1)
count_2 = np.sum(previsoes == 2)
ratio_1 = (count_1 / total_pred) * 100
ratio_2 = (count_2 / total_pred) * 100

print(f"预测结果中值为1的占比: {round(ratio_1, 2)}%")
print(f"预测结果中值为2的占比: {round(ratio_2, 2)}%")

关键说明

  • 使用拆分后的训练集训练模型,测试集用于验证模型泛化能力,避免数据泄露。
  • 通过np.sum(previsoes == 目标值)统计对应数值的出现次数,再除以总预测数得到占比。
  • 若需要查看模型完整分类性能,可添加from sklearn.metrics import classification_report,然后执行print(classification_report(teste_y, previsoes))输出详细指标。

内容的提问来源于stack exchange,提问作者Cleber Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:19