【问题标题】:Perfect accuracy using normalized data pima indians dataset使用归一化数据 pima Indians 数据集的完美准确性
【发布时间】:2018-10-02 02:42:38
【问题描述】:

我正在处理在sklearn 中使用SVC 分类器的奇怪性能。我决定在皮马印第安人数据集中使用kfold cross validation。因为我想尝试一个 SVC 分类器,所以我使用 MinMaxScaler(feature_range=(0, 1)) 对数据进行了归一化,以获得介于 0 和 1 之间的特征值。但是当我运行模型时,我在每个折叠中都获得了 100% 的准确度,这显然是不可能的。我在代码中寻找任何错误,但没有遇到奇怪的事情。这是我的代码。对这种行为有什么建议吗?

PD:我显然加载了所有需要的库。我从这里https://gist.github.com/ktisha/c21e73a1bd1700294ef790c56c8aec1f 下载数据集并对其进行解析,以便以后更轻松。我错过了一步吗?

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
pima = pd.read_csv("pima dataset.txt",names = col_names)
X = pima[col_names].as_matrix()
y = pima.label.as_matrix()
scaler = MinMaxScaler(feature_range=(0, 1))
rescaledX = scaler.fit_transform(X)
# summarize transformed data
np.set_printoptions(precision=3)
#check transformations
print(rescaledX[0:5,:])
X_train, X_test, y_train, y_test = train_test_split(rescaledX,y, test_size = 0.2, random_state =42)
from sklearn.svm import SVC
import random
clf_1 = SVC(random_state = 42) #create a default model
clf_1.fit(X_train, y_train) #fitting the model
r_svc = [random.randrange(1,1000) for i in range(3)] #create a random seed for the 3 simulations.
scores_matrix_clf_1 = []
for i in r_svc:
    kf = KFold(n_splits=10, shuffle = True, random_state = i) 
    kf.get_n_splits(X)
    scores = cross_val_score(clf_1, X_train, y_train, cv=kf, n_jobs=-1, scoring = "accuracy")
    print('          SCORES FOR EACH RANDOM THREE SEEDS',i)
    print('-----------------------------SCORES----------------------------------------')
    print(scores, scores.mean())
    scores_matrix_clf_1.append(scores)

我得到的输出是这样的:

          SCORES FOR EACH RANDOM THREE SEEDS 617
-----------------------------SCORES----------------------------------------
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.] 1.0
          SCORES FOR EACH RANDOM THREE SEEDS 764
-----------------------------SCORES----------------------------------------
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.] 1.0
          SCORES FOR EACH RANDOM THREE SEEDS 395
-----------------------------SCORES----------------------------------------
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.] 1.0

【问题讨论】:

  • 嗨。我用谷歌搜索“当我运行模型时,我得到了 100% 准确的站点:stackoverflow.com 标准化”。始终在 Google 上搜索您的问题/问题/目标/desiderata 的许多清晰、简洁、特定的版本/变体/措辞,带和不带您的特定字符串/名称/代码,并从许多问题中阅读许多答案,这应该会通知您进一步的 Google 搜索。如果在应用所学知识并重复此操作后找不到答案,请提出问题。使用最常见的高效关键字作为标签。使用最佳搜索作为标题。

标签: python scikit-learn dataset normalization


【解决方案1】:

您的X(输入数据集)包含您试图预测的label 列。这称为data leakage,几乎总能达到 100% 的准确率,因为您在一列(特征)中为您的估算器提供了您想要预测的答案。

例子:

假设您有一个包含以下特征的数据集:

  • 人的身高
  • 人体重量
  • 人脚尺寸

你想预测sex

因此,如果您将heightweightfoot size sex 作为输入数据集和sex(再次)作为输出向量提供给您的模型,它会识别出最后一个特征sex 具有最高的系数(权重),因为它总是“预测”正确的性别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2018-12-24
    • 2020-11-12
    • 2021-07-30
    • 2021-01-29
    相关资源
    最近更新 更多