gpt4 book ai didi

python - scikit-learn 中继承的意外结果

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:31 24 4
gpt4 key购买 nike

在尝试创建 KNeighborsClassifier 类的简单修改时,我得到了意外的结果:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=0)

class my_Classifier(KNeighborsClassifier):
"""My Nearest Neighbour classifier"""
def __init__(self, gamma=0):
def my_dist(x, y): # squared distance
return np.sum((abs(x-y))**gamma)
KNeighborsClassifier.__init__(self, n_neighbors=1, metric=my_dist)
self.gamma = gamma
print(gamma)
def fit(self, X, y):
KNeighborsClassifier.fit(self, X, y)
return self
def predict(self, X, y=None):
return KNeighborsClassifier.predict(self, X)
def score(self, X, y):
return KNeighborsClassifier.score(self, X, y)

我已使指标依赖于参数 gamma>=0。如果 gamma=2,则这只是平方欧几里得度量,如果 gamma=0,则这是一个无用的度量(本质上是一个常数)。首先它按预期工作:对于

knn = my_Classifier(gamma=2)
knn.fit(X_train, y_train)
knn.score(X_test,y_test)

输出为

2
0.9736842105263158

(准确度很好)并且对于

knn = my_Classifier(gamma=0)
knn.fit(X_train, y_train)
knn.score(X_test,y_test)

输出为

0
0.34210526315789475

(准确率令人绝望)。我还打印了所使用的 Gamma 值。

但是,当我尝试

from sklearn.model_selection import GridSearchCV
param_grid = {'gamma': [0,2]}
grid_search = GridSearchCV(my_Classifier(), param_grid)
grid_search.fit(X_train, y_train)
grid_search.score(X_test, y_test)

结果出乎意料:

0
0
0
0
0
0
0
0
0.34210526315789475

为什么每次都使用gamma=0这个值?并且 gamma=2 (产生更好的结果)从未尝试过。我知道我犯了一些愚蠢的错误,但看不出在哪里。

最佳答案

不是每次都使用值 gamma = 0!

当你得到这个时你会看到什么:

0
0
0
0
0
0
0
0
0.34210526315789475

分数

<小时/>

要查看gamma,请使用以下命令:

grid_search.cv_results_ 

关于python - scikit-learn 中继承的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53215887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com