我正在尝试使用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.39
和0.42
范围内的数据之间循环。
在一些迭代中,我甚至得到了UndefinedMetricWarning
,它声称“在没有预测样本的标签中,F-score定义错误,被设置为0.0。”
在这个社区和谷歌上做了一些搜索之后,我很熟悉UnfinedMetricWarning
的意思。我想我提出的两个问题可能是:
>
为什么每次迭代我的输出都不同?预处理阶段是否有我不知道的事情发生?
我还试图将F值与其他数据分割一起使用,但我总是收到警告。这是不可预防的吗?
非常感谢。
您正在将数据集拆分为训练和测试,它随机划分训练和测试的集合。因此,当你每次用不同的训练数据训练你的模型,并用不同的测试数据测试它时,你会得到一个范围的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 中参加测验/作业的成绩需老师确认后才会同步