机器学习算法在数据和步骤未改变的情况下得分变化

我刚开始学习机器学习,并且在Kaggle上尝试泰坦尼克号问题。我编写了一个简单的算法来预测测试数据的结果。

我的问题和困惑是,每次我用相同的数据集和相同的步骤执行算法时,分数值(代码中的最后一条语句)都会发生变化。我无法理解这种行为?

代码:

# importsimport numpy as npimport pandas as pdfrom sklearn.tree import DecisionTreeClassifier# load datatrain = pd.read_csv('train.csv')test = pd.read_csv('test.csv')results = pd.read_csv('gender_submission-orig.csv')# prepare training and test datasety = train['Survived']X = train.drop(['Survived', 'SibSp', 'Ticket', 'Cabin', 'Embarked', 'Name'], axis=1)test = test.drop(['SibSp', 'Ticket', 'Cabin', 'Embarked', 'Name'], axis=1)y_test = results['Survived']X = pd.get_dummies(X)test = pd.get_dummies(test)# fill the missing valuesage_median = X['Age'].median()fare_median = X['Fare'].median()X['Age'] = X['Age'].fillna(age_median)test['Age'].fillna(age_median, inplace=True)test['Fare'].fillna(fare_median, inplace=True)# train the classifier and predictclf = DecisionTreeClassifier()clf.fit(X, y)predict = clf.predict(test)# This is the score which changes with execution.print(round(clf.score(test, y_test) * 100, 2)) 

回答:

这是新手在该领域常会遇到的挫折。原因是这种算法中固有的随机性,而简单且直接的解决方法,正如评论中已经建议的那样,是明确设置随机数生成器的状态(种子),例如:

clf = DecisionTreeClassifier(random_state=42) 

但是使用不同的值,分数也会发生变化。那么我们如何找到最佳或正确的数值呢?

同样,这是预期的现象,而且无法克服:这种随机性是根本且不可逆的,你无法超越它。按照上述建议设置随机种子只确保了特定模型/脚本的可重复性,但在这里你所指的“最佳”值(即关于随机部分)的寻找是不可能的。从统计学角度讲,不同随机种子值产生的結果应该在统计意义上是相似的,但对这种相似性的精确量化是一个严格统计学的练习,超出了本文的范围。

随机性往往是一个非直观的领域,随机数生成器(RNG)本身就是奇怪的动物…作为一般性的说明,你可能有兴趣知道RNG在不同语言和框架之间甚至是不“兼容”的

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注