我是Python初学者,最近学习了scikit learn。我正试图将csv中的数据导入numpy数组,然后对其运行clf.fit以"拟合"数据。我使用np.genfromttxt从csv导入数据。如果我的csv中没有列名,那么一切似乎都很好。但是,如果包含列名并使用names=TRUE,clf.fit将失败,并显示以下错误消息:"ValueError:X和y的形状不兼容。X有1个样本,但y有420个。"我使用了两个csv文件——一个是数据,另一个是目标。数据文件包含420行(不包括列名)和约56列。目标文件包含420行(同样不包括列名)和1列。所有数据都是int/foat。
我已附上以下产出。我想知道为什么clf.fit的输出会根据numpy数组是否包含列名而变化。如果你需要更多信息,请告诉我。请注意,MLB_data1与MLB_data相同,但没有列名。对于MLB_ target1和MLB_。
名称为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引发ValueError("X和y的形状不兼容。\n"+
150"X有%s个样本,但y有%s个。"%
-->151(X.shape[0],y.shape[0])
152153如果self.kernel=="预计算"且X.shape[0]!=X.shape[1]:
ValueError:X和y的形状不兼容
X有1个样本,但y有420个。
编码和名称输出=无
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,coeff0=0.0,degree=3,gamma=0.0,
kernel='rbf',max_iter=-1,probability=False,random_state=None,
收缩=真,tol=0.001,verbose=假)
数据的有效形状不是您所期望的:添加打印语句,如print(mlb_data)
、print(mlb_data.dtype)
和print(mlb_data.shape)
,以调试np.genfromtxt
如何解析数据。
我怀疑,当您传递names=True
时,您会得到一个1D记录数组,其中每一行都是结构化的。这不是scikit learn所期望的那种数据。scikit-learn总是想要具有浮点dtype的同质2D numpy数组。
要解决此错误,请使用:
dataset = np.genfromtxt('file.csv', skip_header=1, delimiter=',', dtype=float)