【问题标题】:load data from csv into Scikit learn SVM将数据从 csv 加载到 Scikit 学习 SVM
【发布时间】:2015-07-18 23:43:10
【问题描述】:

我想训练一个支持向量机来执行样本分类。我有一个 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:无法将字符串转换为浮点数:��ࡱ�”

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

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

12  122 34
12234   54  23
23  34  23

【问题讨论】:

  • 查看 csv 的前几行会很有用
  • 嗨,我已经用几行 csv 更新了这个问题。
  • 我在你的 csv 中没有看到分隔符,删除 delimiter 参数所以:data = np.loadtxt('test.csv') 应该可以工作
  • 分隔符也有可能是一个制表符(看看值是如何对齐的)。如果是这种情况,请尝试delimiter='\t'
  • @EdChum- 是的,现在我注意到没有逗号。

标签: python csv numpy scikit-learn


【解决方案1】:

您传递了参数 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 用于分隔值的字符串。经过 默认,这是任何空格。

【讨论】:

  • 正如我所说的,问题在于 csv 文件而不是分隔符。我认为将分隔符更改为“”是行不通的,因为创建 csv 文件时,它的分隔符是“,”,您不同意吗?
  • 是的,你是对的。我从en.wikipedia.org/wiki/Comma-separated_values 确认了它。但是,我在创建 csv 文件时给人的印象是分隔符是逗号。我在保存文件时犯了一个错误,因此出现了错误。
【解决方案2】:

问题在于 csv 文件而不是 loadtxt() 函数。我保存的格式没有提供正确的 .csv 文件(不知道为什么!-也许我根本没有保存它)。但是有一种方法可以验证 csv 文件是否以正确的格式保存。使用记事本打开 .csv 文件。如果数据之间有逗号,则正确保存。并且 loadtxt() 将起作用。如果它显示一些乱码,则重新创建它然后检查。

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 2012-11-19
    • 2018-02-06
    • 2014-02-02
    • 2013-08-27
    • 2014-02-20
    • 1970-01-01
    • 2014-04-20
    • 2020-12-10
    相关资源
    最近更新 更多