Sklearn 中的 fit 方法。使用 KNeighborsClassifier 时

fit method in Sklearn. when using KNeighborsClassifier

from sklearn.neighbors import KNeighborsClassifier

knn_clf =KNeighborsClassifier() 
knn_clf.fit(x_train[:92000],y_train[:92000]) #1st method call
knn_clf.fit(x_train[92000:123000],y_train[92000:123000]) #2nd method call

我怀疑当我像这样调用 fit 方法时,第二次调用是否再次从头开始训练模型?或者它会添加到它从之前的 fit 调用(第一个方法调用)中学到的东西?

我想要实现的是进行批量训练,因为如果我一次使用完整的数据集,笔记本电脑无法处理这些数据! 提前致谢:-)

每次调用 fit 方法时,它都会尝试拟合模型。如果您多次调用 fit 方法,它会尝试重新拟合模型,正如@Julien 指出的那样,批量训练对 KNN 没有任何意义。

KNN 将考虑所有数据点并选择最接近的前 K 个 neighbors.So 如果您的数据很大,则需要更多时间。

您所能做的就是缩小数据规模或增加系统内存大小。

k-NN Classifier 中没有训练,因为查询点(来自测试数据)是强制性的,以找到它最近的邻居并根据多数投票进行分类。 如果没有查询点(测试数据),模型将通过训练数据来做什么?

也许,k-NN Classifier 的 model.fit() 方法不进行训练,而是将数据集存储在有效的数据结构中以供搜索。

当我们尝试使用 model.predict() 对数据点(来自测试数据)进行分类时,k-NN 将从训练数据中找到 'k' 最近的邻居并对查询点进行分类基于多数票。

关于您的问题,第二个拟合方法将覆盖 'knn_clf' 模型的存储数据,并丢弃第一个拟合方法存储的数据。让我们通过一个例子来证明这一点:

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier}

# Load the Iris Dataset
irisDS = datasets.load_iris()

# Get Features and Labels
features, labels = iris.data, iris.target

knn_clf = KNeighborsClassifier() # Create a KNN Classifier Model Object

queryPoint = [[9, 1, 2, 3]] # Query Datapoint that has to be classified

# Case 1: fit on whole Dataset (total 150 datapoints)
knn_clf.fit(features, labels)
print(knn_clf.predict(queryPoint)) # Prints Class 1
# Query Point belongs to Class 1 if all the Dataset is taken in the fit method

# Case 2: fit on a subset of whole Dataset (last 40 datapoints)
knn_clf.fit(features[110:], labels[110:])
print(knn_clf.predict(queryPoint)) # Prints Class 2
# Query Point belongs to Class 2 if last 40 Datapoints are taken in the fit method => Wrong Classification because of a small subset of Training Data.

Case 3: fit on subsets of whole Dataset (last 40 and then first 110 datapoints)
knn_clf.fit(features[110:], labels[110:])
knn_clf.fit(features[:110], labels[:110])
print(knn_clf.predict(queryPoint)) # Prints Class 1
# Query Point belongs to Class 1 if 'last 40 and then first 110 datapoints' are taken in the fit method => Correct Classification because the Training Data has luckily majority of Class 1.

# Case 4: fit on subsets of whole Dataset (first 110 and then last 40 datapoints)
knn_clf.fit(features[:110], labels[:110])
knn_clf.fit(features[110:], labels[110:])
print(knn_clf.predict(queryPoint)) # Prints Class 2
# Query Point belongs to Class 2 if 'first 110 and then last 40 datapoints' are taken in the fit method => Wrong Classification because of a small subset of Training Data.

如果我们看到,查询点属于 Class 1(当适合整个数据集时)但在情况 4(您的情况)中预测错误,即使我们假设我们已经将整个数据集批次(错误的假设)。 这意味着 recent/latest 拟合方法中的数据仅被 KNN Classifier 模型考虑。