Некоторые статистические данные, связанные с этим известным вопросом с двойной точностью.
При добавлении всех значений ( a + b ) с шагом 0,1 (от 0,1 до 100) имеем ~ 15% вероятность ошибки точности. Обратите внимание, что ошибка может привести к несколько большим или меньшим значениям. Вот несколько примеров:
0.1 + 0.2 = 0.30000000000000004 (BIGGER)
0.1 + 0.7 = 0.7999999999999999 (SMALLER)
...
1.7 + 1.9 = 3.5999999999999996 (SMALLER)
1.7 + 2.2 = 3.9000000000000004 (BIGGER)
...
3.2 + 3.6 = 6.800000000000001 (BIGGER)
3.2 + 4.4 = 7.6000000000000005 (BIGGER)
При вычитании всех значений ( a - b , где a> b ) с шагом 0,1 (от 100 до 0,1), мы имеем вероятность 34% точности. Вот несколько примеров:
0.6 - 0.2 = 0.39999999999999997 (SMALLER)
0.5 - 0.4 = 0.09999999999999998 (SMALLER)
...
2.1 - 0.2 = 1.9000000000000001 (BIGGER)
2.0 - 1.9 = 0.10000000000000009 (BIGGER)
...
100 - 99.9 = 0.09999999999999432 (SMALLER)
100 - 99.8 = 0.20000000000000284 (BIGGER)
* 15% и 34% действительно огромны, поэтому всегда используйте BigDecimal, когда точность имеет большое значение. С 2 десятичными цифрами (шаг 0,01) ситуация несколько ухудшается (18% и 36%).
cross_val_score
в основном является удобной оболочкой для итераторов перекрестной проверки sklearn . Вы даете ему классификатор и весь набор (обучение + валидация), и он автоматически выполняет один или несколько раундов кросс-валидации, разбивая ваши данные на случайные обучающие / валидационные наборы, устанавливая набор тренировок и вычисляя счет на наборе валидации , См. Документацию здесь для примера и более подробного объяснения.
Причина, по которой clf.score(X_test, y_test)
вызывает исключение, состоит в том, что cross_val_score
выполняет установку на копии оценщика, а не оригинала (см. здесь clone(estimator)
в исходном коде здесь ). Из-за этого clf
остается неизменным вне вызова функции и поэтому неправильно инициализируется при вызове clf.fit
.
посмотрите, что вам нужно предварительно запрограммировать cross_val_score на iris.data iris.target напрямую.
Irish = load_iris()
x = Irish.data
y = Irish.target
Knn = KNeighborsClassifier(n_neighbors=20)
Score = cross_val_score(Knn, x, y, cv=10, scoring="accuracy")
print(Score) #return a np.array of each test trill
print(Score.mean()) #return the average of the Score/out-of-sample accuracy