Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么考试比训练时间长?_Python_Scikit Learn_Knn - Fatal编程技术网

Python 为什么考试比训练时间长?

Python 为什么考试比训练时间长?,python,scikit-learn,knn,Python,Scikit Learn,Knn,我正在MNIST数字数据集上培训sklearnKNN分类器 代码如下: knn = KNeighborsClassifier() start_time = time.time() print (start_time) knn.fit(X_train, y_train) elapsed_time = time.time() - start_time print (elapsed_time) 需要40秒。然而,当我对测试数据进行测试时,它需要几分钟以上(仍在运行),而测试数据比列车数据少6倍

我正在MNIST数字数据集上培训sklearn
KNN分类器

代码如下:

knn = KNeighborsClassifier()

start_time = time.time()
print (start_time)
knn.fit(X_train, y_train)
elapsed_time = time.time() - start_time

print (elapsed_time)
需要40秒。然而,当我对测试数据进行测试时,它需要几分钟以上(仍在运行),而测试数据比列车数据少6倍

代码如下:

y_pred = knn.predict(X_test)
print(confusion_matrix(y_test,y_pred))

你能解释一下为什么花这么多时间(比训练时间还多)吗?解决这个问题的方法?

想想k-NN算法的工作原理。这是一个典型的延迟学习示例,在预测时,必须计算到原始训练数据的距离(以确定哪一个是最接近的邻域)。
在训练时,它不需要进行非常昂贵的距离计算

因此,区别主要在于从
.fit()
.predict()
当你真正尝试预测火车组时,这将花费更长的时间

有关更多信息,请参阅例如


解决方案:考虑该算法是否真正适合您的情况,或者您是否可以使用更粗糙的距离近似值。

考虑k-NN算法的工作原理。这是一个典型的延迟学习示例,在预测时,必须计算到原始训练数据的距离(以确定哪一个是最接近的邻域)。
在训练时,它不需要进行非常昂贵的距离计算

因此,区别主要在于从
.fit()
.predict()
当你真正尝试预测火车组时,这将花费更长的时间

有关更多信息,请参阅例如


对于解决方案:想想这个算法是否真的适合您的情况,或者您是否可以使用更粗糙的距离近似值。

您能否详细说明为什么您希望它们花费相同的时间?这些是不同的函数,因此,无论数据如何,它们的运行时间都会不同。训练一个模型是一回事,使用它进行分类是另一回事。@IslamEl Rougy训练数据用于构建分类器,因此它需要计算时间(而在模型已经构建时使用测试数据)。此外,训练数据是测试数据的六倍,因此我看不出为什么它会持续如此长的时间。我不完全确定函数的具体实现,但在KNN的情况下,预测比构建模型花费更多的时间是有意义的,因为模型需要测量欧几里得测试数据中每个样本的k个最近邻居(或其他类型的距离),而在训练中不需要这样做。为了减少测试时间,考虑调整“K”。参数或选择另一个模型。你能详细说明为什么你希望它们占用相同的时间吗?这些是不同的函数,因此它们的运行时间将不同,而不管数据如何。训练模型是一回事,使用模型进行分类是另一回事。@IslamEl Rougy训练数据用于构建classifier,因此需要计算时间(当模型已经建立时使用测试数据)。此外,训练数据是测试数据的六倍,因此我看不出为什么它会持续如此长的时间。我不能确切地确定函数的具体实现,但在KNN的情况下,预测比构建模型花费更多的时间是有意义的,因为模型需要测量欧几里得测试数据中每个样本的k个最近邻(或其他类型的距离),而在训练中不需要这样做。为了减少测试时间,考虑调整“K”参数或完全选择另一个模型。