【问题标题】:train_test_split random_state not working; produces different output everytimetrain_test_split random_state 不工作;每次产生不同的输出
【发布时间】:2020-02-03 02:37:00
【问题描述】:

所以,我一直在对一组数据使用 KNN,在 train_test_split 阶段使用 random_state = 4。尽管使用了随机状态,但每次输出的准确率、分类报告、预测等都是不同的。想知道为什么会这样吗?

这是数据的头部:(根据 all_time_runs 和 order 预测位置)

order position  all_time_runs
0     10   NO BAT           1304
1      2  CAN BAT           7396
2      3   NO BAT           6938
3      6  CAN BAT           4903
4      6  CAN BAT           3761

这是分类和预测的代码:

#splitting data into features and target

X = posdf.drop('position',axis=1)
y = posdf['position']   


knn = KNeighborsClassifier(n_neighbors = 5)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)

#fitting the KNN model
knn.fit(X_train, y_train)

#predicting with the model
prediction = knn.predict(X_test)

#knn score
score = knn.score(X_test, y_test)

【问题讨论】:

  • train_test_split()函数的另一个参数默认为shuffle=True。用于在拆分之前是否对数据进行洗牌。在许多训练函数中总是建议对数据进行洗牌。但是,如果您想得出相同的结果,则需要在该函数中提供shuffle=False
  • 那么在这种情况下,如果它不是每次都产生相同的结果,那么 random_state 的目的是什么?如果我在不改变随机播放的情况下使用 random_state = None 会对我的输出产生什么影响?
  • 此外,即使我将 shuffle = False,它仍然会给我不同的结果。迷路了……

标签: python random scikit-learn state


【解决方案1】:

train_test_split有一个与它相关的随机因子,必须解决,以避免随机重建,这不是您应该在解决的唯一因素。

Knn是一个拍摄每行测试集的模型,找到最接近的k训练设置向量,并通过多数决定对其进行分类,即使在关系的情况下,决定是随机的。您需要set.seed(x)以确保该方法可复制。

Documentation状态:

基于邻居的分类是一种基于实例的学习或非概括学习:它不会尝试构建一般内部模型,而是简单地存储培训数据的实例。分类是从每个点的最近邻居的简单大多数投票计算的:将查询点分配了具有最近邻居内的最多代表的数据类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2021-07-07
    • 2014-12-07
    • 2014-05-06
    • 2014-08-24
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多