【发布时间】: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,详细=假)
【问题讨论】:
标签: python csv numpy scikit-learn