将数据从csv加载到Scikit中学习SVM

时间:2015-05-08 06:41:50

标签: python csv numpy scikit-learn

我想训练SVM来执行样本分类。我有一个csv文件,我有3列标题:功能1,功能2,类标签和20行(=样本数)。

现在我引用Scikit-Learn文档 “与其他分类器一样,SVC,NuSVC和LinearSVC将两个数组作为输入:大小为[n_samples,n_features]的数组X保存训练样本,以及类标签(字符串或整数)的数组y,大小[n_samples]:”

据我所知,我需要获取两个数组(一个2d和一个1d数组)才能将数据输入SVM。但是我无法理解如何从csv文件中获取所需的数组。 我试过以下代码

import numpy as np
data = np.loadtxt('test.csv', delimiter=',')
print data

然而它显示错误 “ValueError:无法将字符串转换为float: ࡱ ”

csv中没有列标题。我在调用函数np.loadtxt时是否有任何错误,或者是否应该使用其他东西?

更新: 这是我的.csv文件的样子。

12  122 34
12234   54  23
23  34  23

2 个答案:

答案 0 :(得分:0)

您通过了参数delimiter=',',但您的csv未以逗号分隔。

以下是有效的:

In [378]:

data = np.loadtxt(path_to_data)
data
Out[378]:
array([[  1.20000000e+01,   1.22000000e+02,   3.40000000e+01],
       [  1.22340000e+04,   5.40000000e+01,   2.30000000e+01],
       [  2.30000000e+01,   3.40000000e+01,   2.30000000e+01]])

docs显示默认情况下分隔符为None,因此将空格视为分隔符:

  

delimiter:str,optional用于分隔值的字符串。通过   默认,这是任何空格。

答案 1 :(得分:0)

The issue was with the csv file rather than the loadtxt() function. The format in which I saved was not giving a proper .csv file(dont know why!-maybe I didnt save it at all). But there is a way to verify whether the csv file is saved in the right format or not. Open the .csv file using notepad. If the data has commas between them, then it is saved properly. And loadtxt() will work. If it shows some gibberish, then create it again and then check.