ValueError:在defaultdict上使用sklearn时样本数不一致

时间:2016-07-12 03:48:26

标签: python csv scikit-learn defaultdict

我正在阅读.csv文件中的列作为sklearn Naive Bayes fit的输入。但是,我遇到了这些错误和警告:

DeprecationWarning:传递1d数组作为数据在0.17中弃用,并将在0.19中引发ValueError。如果数据具有单个特征,则使用X.reshape(-1,1)重新整形数据;如果包含单个样本,则使用X.reshape(1,-1)重新整形数据。

ValueError:找到样本数不一致的数组:[1 10509]

这是我的代码:

clf = GaussianNB()

columns = defaultdict(list)
with open('file.CSV', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        for(i, v) in enumerate(row):
            columns[i].append(v)

clf.fit(columns[9], columns[10])

作为注释,len(列[9])和len(列[10])都是10509

正如警告所示,我尝试了很多reshape(),flatten(),ravel()的不同组合,并尝试使用numpy数组,但似乎没有任何工作。

有什么建议吗?似乎大多数人都使用某种数据结构而不是defaultdict,但我不确定如何使用其他数据结构来读取.csv

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。似乎问题不是关于塑造数据结构,而是将其设置为数字类型而不是字符串类型。

x = np.array(columns[9]).reshape(len(columns[10]), 1).astype(np.float)
y = np.array(columns[10])
clf.fit(x, y)