将 clf.fit 与 csv 中的 numpy 数组一起使用

Posted

技术标签:

【中文标题】将 clf.fit 与 csv 中的 numpy 数组一起使用【英文标题】:Using clf.fit with numpy arrays from csv 【发布时间】:2014-01-05 23:40:35 【问题描述】:

我是一名 Python 初学者,最近了解了 scikit-learn。我正在尝试将数据从 csv 导入 numpy 数组,然后在其上运行 clf.fit 以“拟合”数据。我正在使用 np.genfromtxt 从 csv 导入数据。如果我的 csv 中没有列名,一切似乎都运行良好。但是,如果我包含列名并使用 names=TRUE,clf.fit 将失败并显示以下错误消息:“ValueError:X 和 y 的形状不兼容。 X 有 1 个样本,但 y 有 420 个。” 我正在使用 2 个 csv 文件 - 一个是数据,另一个是目标。数据文件包含 420 行(不包括列名)和大约 56 列。目标文件包含 420 行(同样不包括列名)和 1 列。所有数据都是 int/float。

我附上了下面的输出。我想知道为什么 clf.fit 的输出会根据 numpy 数组是否包含列名而改变。如果您需要更多信息,请告诉我。 请注意,MLB_data1 与 MLB_data 相同,但没有列名。 MLB_target1 和 MLB_target 也是如此。

名称=TRUE的代码和输出

import numpy as np
from sklearn import svm
mlb_data = np.genfromtxt("MLB_data.csv", dtype=float, delimiter=',', names=True)
mlb_target = np.genfromtxt("MLB_target.csv", dtype=float, delimiter=',', names=True)
clf = svm.SVC()
clf.fit(mlb_data, mlb_target)

输出:

----------------------------------- ---------------------------------------- ValueError Traceback(最近一次调用最后一次) 在 () 6 7 clf = svm.SVC() ----> 8 clf.fit(mlb_data, mlb_target)

C:\Users\Anand\Anaconda\lib\site-packages\sklearn\svm\base.pyc in fit(self, X, y, sample_weight) 149 raise ValueError("X 和 y 的形状不兼容。\n" + " 150 "X 有 %s 个样本,但 y 有 %s。" % --> 151 (X.shape[0], y.shape[0])) 152 153 if self.kernel == "precomputed" and X.shape[0] != X.shape[1]:

ValueError:X 和 y 的形状不兼容。 X 有 1 个样本,但 y 有 420 个。

names=None 的代码和输出

import numpy as np
from sklearn import svm
mlb_data = np.genfromtxt("MLB_data1.csv", dtype=float, delimiter=',', names=None)
mlb_target = np.genfromtxt("MLB_target1.csv", dtype=float, delimiter=',', names=None)
clf = svm.SVC()
clf.fit(mlb_data, mlb_target)

输出:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf',max_iter=-1,probability=False,random_state=None, 收缩=真,tol=0.001,详细=假)

【问题讨论】:

【参考方案1】:

你的数据的有效形状不是你所期望的:添加诸如print(mlb_data)print(mlb_data.dtype)print(mlb_data.shape)的打印语句来调试np.genfromtxt是如何解析数据的。

我怀疑当您传递names=True 时,您会得到一个每行都结构化的一维记录数组。这不是 scikit-learn 期望的那种数据。 scikit-learn 总是需要具有浮点 dtype 的同质 2D numpy 数组。

【讨论】:

【参考方案2】:

要解决此错误,请使用:

 dataset = np.genfromtxt('file.csv', skip_header=1, delimiter=',', dtype=float)

【讨论】:

以上是关于将 clf.fit 与 csv 中的 numpy 数组一起使用的主要内容,如果未能解决你的问题,请参考以下文章

scikit 学习 clf.fit / 评分模型准确性

线性模型的fit,predict

将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv

如何将 CSV 文件中的数据加载到 numpy 数组中[重复]

如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值? [复制]

sklearn plot_tree 图太小