首页 文章

使用来自csv的numpy数组的clf.fit

提问于
浏览
0

我是一名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 .

Code and Output with names=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(self,X,y,sample_weight)149引发ValueError("X and y have incompatible shapes.\n"
150 "X has %s samples, but y has %s."%

  • 151(X.shape [0],y.shape [0]))
    152 153如果self.kernel == "precomputed"和X.shape [0]!= X.shape [1]:

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

Code and Output with 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,verbose = False)

2 回答

  • 1

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

    我怀疑当你传递 names=True 时,你得到一个1D记录数组,其中每一行都是结构化的 . 这不是scikit-learn所期望的那种数据 . scikit-learn总是希望使用float dtype的同类2D numpy数组 .

  • 0

    要解决此错误,请使用:

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

相关问题