使用标准化数据pima数据的完美精度

2024-05-04 21:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用sklearn中的SVC分类器处理一个奇怪的性能。我决定在pima印第安人数据集中使用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

Tags: testfornamestrainrandommatrixthreeeach
1条回答
网友
1楼 · 发布于 2024-05-04 21:05:25

您的X(输入数据集)包含试图预测的label列。这被称为data leakage,几乎总是导致100%的准确率,因为您在一列(特征)中给出了您想要预测的答案。你知道吗

示例:

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

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

你想预测sex。你知道吗

因此,如果您将heightweightfoot sizesex作为输入数据集和sex(再次)作为输出向量输入到您的模型中,它会发现最后一个特征sex的系数(权重)最高,因为它总是“预测”正确的性别。你知道吗

相关问题 更多 >