将 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 数组一起使用的主要内容,如果未能解决你的问题,请参考以下文章
将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv
如何将 CSV 文件中的数据加载到 numpy 数组中[重复]