当前位置: 首页 > 知识库问答 >
问题:

Sklearn DecisionTreeClassifier F-每次跑步的成绩不同

申屠瀚海
2023-03-14

我正在尝试使用Python训练一个决策树分类器。我正在使用MinMaxScaler()缩放数据,并使用f1\u分数作为我的评估指标。奇怪的是,我注意到我的模型在每次运行时给了我不同的结果。

数据在我的代码中是一个(2000,7)熊猫。DataFrame,具有6个要素列,最后一列为目标值。第1、3和5列是分类数据。

下面的代码是我预处理和格式化我的数据所做的:

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import f1_score


# Data Preprocessing Step
# =============================================================================
data = pd.read_csv("./data/train.csv")

X = data.iloc[:, :-1]
y = data.iloc[:, 6]

# Choose which columns are categorical data, and convert them to numeric data.
labelenc = LabelEncoder()
categorical_data = list(data.select_dtypes(include='object').columns)

for i in range(len(categorical_data)):
    X[categorical_data[i]] = labelenc.fit_transform(X[categorical_data[i]])


# Convert categorical numeric data to one-of-K data, and change y from Series to ndarray.
onehotenc = OneHotEncoder()
X = onehotenc.fit_transform(X).toarray()
y = y.values

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

min_max_scaler = MinMaxScaler()
X_train_scaled = min_max_scaler.fit_transform(X_train)
X_val_scaled = min_max_scaler.fit_transform(X_val)


下一个代码是用于实际决策树模型训练的:

dectree = DecisionTreeClassifier(class_weight='balanced')
dectree = dectree.fit(X_train_scaled, y_train)
predictions = dectree.predict(X_val_scaled)
score = f1_score(y_val, predictions, average='macro')

print("Score is = {}".format(score))


我得到的输出(即分数)各不相同,但有一种模式。例如,它将在0.390.42范围内的数据之间循环。

在一些迭代中,我甚至得到了UndefinedMetricWarning,它声称“在没有预测样本的标签中,F-score定义错误,被设置为0.0。”

在这个社区和谷歌上做了一些搜索之后,我很熟悉UnfinedMetricWarning的意思。我想我提出的两个问题可能是:


>

  • 为什么每次迭代我的输出都不同?预处理阶段是否有我不知道的事情发生?

    我还试图将F值与其他数据分割一起使用,但我总是收到警告。这是不可预防的吗?

    非常感谢。

  • 共有1个答案

    萧安怡
    2023-03-14

    您正在将数据集拆分为训练和测试,它随机划分训练和测试的集合。因此,当你每次用不同的训练数据训练你的模型,并用不同的测试数据测试它时,你会得到一个范围的F分数,这取决于模型训练得有多好。

    要在每次运行时复制结果,请使用random\u state参数。它将保持一个随机数状态,每次运行时都会给您相同的随机数。这表明随机数是以相同的顺序生成的。这可以是任何数字。

    #train test split
    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=13)
    
    #Decision tree model
    dectree = DecisionTreeClassifier(class_weight='balanced', random_state=2018)
    
     类似资料:
    • 我正在intelliJ上用livereload测试spring-boot-devtools。我有一个简单的spring boot应用程序,效果很好。 当我从maven命令“mvn-spring-boot:run”启动应用程序时,除了livereload服务器不启动之外,所有工作正常。控制台上没有显示消息,chrome扩展显示错误,无法连接到livereload服务器。 如果我使用(右鼠标按钮/Ru

    • 跑步指数以简单方式监测跑步成绩变化。跑步指数得分是对您最大有氧跑步成绩(VO2max)的估算值。通过随时间记录您的跑步指数,您可以监测跑步效果和如何改进跑步成绩。改进意味着以既定步速跑步时消耗的体力更少,或者在既定的体力消耗水平上,您的步速更快。 为接收到最准确的成绩信息,请确保您已经设置 HRmax 值。 每次训练期间,在测量心率时同时开启 GPS 功能/使用步幅传感器的情况下均会计算跑步指數,

    • 跑步指数以简单方式监测跑步成绩变化。跑步指数得分是对您最大有氧跑步成绩(VO2max)的估算值。通过随时间记录您的跑步指数,您可以监测跑步效果和如何改进跑步成绩。改进意味着以既定步速跑步时消耗的体力更少,或者在既定的体力消耗水平上,您的步速更快。 为接收到最准确的成绩信息,请确保您已经设置 HRmax 值。 每次训练期间,在测量心率时同时开启 GPS 功能/使用步幅传感器的情况下均会计算跑步指數,

    • 跑步指数以简单方式监测跑步成绩变化。跑步指数值用来估计有氧跑步的最高成绩,该成绩受有氧适能和跑步成效的影响。通过随时间记录您的跑步指数,您可以监测进展情况。改进意味着以既定步速跑步时消耗的体力更少,或者在既定的体力消耗水平上,您的步速更快。 为接收到最准确的成绩信息,请确保您已经设置 HRmax 和 HRrest 值。 当心率传感器正在使用中且 GPS 功能开启时,每次训练期间都会计算跑步指数,适

    • Polar 跑步计划是一个随时可用的个人化的跑步计划,用于帮助您针对跑步比赛而进行训练。不论您是进行 5K 长跑训练还是进行马拉松训练,跑步计划都会告诉您如何训练、训练多少、训练频率。 Polar 跑步计划基于您的体能水平制定,用于确保您以正确的方式进行训练,并避免过度训练。这项计划专门针对您的比赛定制,考虑了您的个人特点、训练背景与准备时间。提供针对 5K、10K、半马拉松以及马拉松比赛的跑步计

    • 除了从课堂维度查看数据之外,点击左侧【学生成绩】,可以查看学生维度的统计数据,关联mooc 或 spoc 课程的慕课堂,可以在学习表现中看到学生的视频观看个数、次数、时长、讨论区主题数、评论数、回复数、线上课程的学习总成绩。 提示:学生在MOOC/SPOC中观看视频、参与互动的数据每天一次同步到慕课堂后台(课程相关数据隔天更新),学生在MOOC/SPOC 中参加测验/作业的成绩需老师确认后才会同步