【发布时间】:2018-10-18 17:05:49
【问题描述】:
我最近使用 sklearn 分为机器学习。在将它与一些数据一起使用后,我注意到无论我删除还是添加功能,准确性都没有改变(它停留在 0.66668208448967)。换句话说
import pandas as pd
from sklearn.linear_model import LogisticRegression
import numpy as np
from sklearn.model_selection import cross_val_score
scores = []
data = pd.read_csv('/Users/fozoro/Downloads/test.csv')
X = data[["x","y"]]
y = data[["correct"]]
knn = LogisticRegression()
knn.fit(X,y.values.ravel())
scores = cross_val_score(knn, X, y.values.ravel(), cv = 10, scoring = "accuracy")
print(scores.mean())
此代码打印0.66668208448967
为了更好地说明我的观点,我在我的 CSV 文件中添加了一个完全由 0 组成的列(我将该列命名为 zeros)。改变后
X = data[["x","y"]] 到 X = data[["zeros"]] 我最终得到了这段代码。
import pandas as pd
from sklearn.linear_model import LogisticRegression
import numpy as np
from sklearn.model_selection import cross_val_score
scores = []
data = pd.read_csv('/Users/fozoro/Downloads/HQ_Questions_Rest_new_test.csv')
X = data[["zeros"]]
y = data[["correct"]]
knn = LogisticRegression()
knn.fit(X,y.values.ravel())
scores = cross_val_score(knn, X, y.values.ravel(), cv = 10, scoring = "accuracy")
print(scores.mean())
它仍然打印出相同的分数0.66668208448967。
此时,我假设它仍在使用超过两列 x 和 y 尽管我不明白为什么。有谁知道是什么问题?
非常感谢您的帮助。
这是 csv 文件的一小部分。
0 44600 yes
12 41700 no
574 14500 no
当我打印(data.dtypes)时,我得到以下信息:
Q + ans int64
Q + ans broken search int64
Bing total Search int64
mean1 float64
mean2 float64
zeros int64
correct int64
dtype: object
当我 print(data.describe()) 我得到以下信息:
Q + ans Q + ans broken search Bing total Search mean1 \
count 477.000000 477.000000 4.770000e+02 477.000000
mean 3.972746 30.408805 3.661450e+06 3.972746
std 12.112970 133.128478 1.555090e+07 7.292793
min 0.000000 0.000000 0.000000e+00 0.000000
25% 0.000000 0.000000 8.110000e+04 0.000000
50% 0.000000 0.000000 3.790000e+05 1.333333
75% 2.000000 4.000000 2.000000e+06 5.333333
max 162.000000 1908.000000 2.320000e+08 60.666667
mean2 zeros correct
count 477.000000 477.0 477.000000
mean 30.272537 0.0 0.333333
std 76.365587 0.0 0.471899
min 0.000000 0.0 0.000000
25% 0.000000 0.0 0.000000
50% 1.666667 0.0 0.000000
75% 21.000000 0.0 1.000000
max 636.666667 0.0 1.000000
【问题讨论】:
-
您的目标值 y 是如何分布的?我猜你的数据有 2/3 属于一个类,1/3 属于其他类。此外,在将估算器传递给
cross_val_score之前,您不必拟合估算器,请参阅 scikit-learn.org/stable/modules/generated/… -
你能尝试提供一个minimal reproducible example吗?还要添加您更改
X的代码并重新调整模型。 -
@Merlin1896 你说的是列的长度吗? (它们都有相同数量的数据)
-
@Fozoro 不,我不是在谈论列长度。我说的是你的 y 值的分布(“正确”列)。我希望它们是整数,每个整数代表一个类。那么,您如何“正确”分配值(您的类)?一共有多少个班?
-
@pault 我刚刚添加了有问题的代码。你想让我包含 csv 文件吗?
标签: python pandas machine-learning scikit-learn supervised-learning