【问题标题】:Loading a Dataset for Linear SVM Classification from a CSV file从 CSV 文件加载线性 SVM 分类的数据集
【发布时间】:2020-03-16 17:44:40
【问题描述】:

我在下面有一个名为 train.csv 的 csv 文件:

   25.3, 12.4, 2.35, 4.89, 1, 2.35, 5.65, 7, 6.24, 5.52, M
   20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56, B
   4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34, B
   1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, M

我正在尝试将这个数据集分离并分类如下(这是我想要的输出):

    [[25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52], 
    [20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56], 
    [4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34], 
    [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5]], 
    [M, B, B, M]

“[[”中的一个是x(样本数据),“[M,M,B,B,M]”中的一个是y(与它的数据集匹配的分类.

我正在尝试创建一个已加载的 python 代码,并且可以打印出由数据分隔的数据及其分类。它与线性SVM有关。

y_list = []
x_list = []
for W in range(0, 100):
    X = data_train.readline()
    y = X.split(",")
    y_list.append(y[10][0])
    print(y_list)
    z_list = []
    for Z in range(0, 10):
        z_list.append(y[Z])
    x_list.append(z_list)
    dataSet = (x_list, y_list)
    print(dataSet)

注意:我知道我的范围完全错误。对于这种类型的示例,我完全不确定如何适应范围,谁能解释一下范围在这种情况下如何工作。

注意:我知道“y[10][0]”的附加行也是错误的。有人可以解释这些索引是如何工作的。

总的来说,我希望输出是我上面所说的输出。谢谢您的帮助。

【问题讨论】:

  • 据了解,您想根据其他数据预测分类吗?你看过sklearn.model_selection中的train_test_split函数吗?

标签: python svm libsvm


【解决方案1】:

我认为你应该使用 pandas,它是一个帮助你阅读 csv 的库:

import pandas as pd

dataset = pd.read_csv('train.cvs')

其次可以使用train_test_split自动拆分数据:

X_train, X_test, y_train, y_test = train_test_split(
        X, y, stratify=y, test_size=0.2)

这将拆分数据,其中 X_train 和 X_test 占数据的 80%,y_train、y_test 占 20%。这可以通过调整test_size 来改变。 stratify 会在训练和测试中自动使分类计数(M,B)的比率相等,这在机器学习中通常被认为是好的做法。这将每次生成随机拆分。如果您想要相同的拆分,您可以使用 random_state=(SEED) 作为关键字参数。

之后,您可以继续机器学习:

from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, classification_report

# Important to scale
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

clf = SVC()
clf.fit(X_train, y_train)
pred = clf.predict(X_test)

print(classification_report(y_test, pred))
print(confusion_matrix(y_test, pred))

【讨论】:

  • 可以为熊猫应用 KFold 选择而不是 train_test_split 吗?这就是我需要使用的问题
  • Nvm,我为你找到了一个很好的答案:stackoverflow.com/questions/45115964/…
  • 希望对您的作业有所帮助:)
  • 这有帮助。谢谢!
【解决方案2】:

首先,我认为您的 CSV 文件的第一行有错误:

25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52, M

我只是假设它应该是 4.89、1,而不是 4.89。 1.

其次,我建议你使用 pandas 来读取那个 CSV,然后这样做:

import pandas as pd
data = pd.read_csv('prueba.csv', header=None, usecols=[i for i in range(11)])
# the usecols=[i for i in range(11)] will create a list of numbers for your columns
# that line will make a dataframe called data, which will contain your data.
l = [i for i in range(10)]
X_train = data[l]
y_train = data[10]

这是为 scikit-learn 中的任何机器学习算法准备数据的最简单方法。

【讨论】:

  • 天哪,我想我可以使用它。实际上,在我应该做的问题中,我需要使用 sklearn.model.selection KFold。这对 Panda 有用吗?
  • 是的,当然。上例中的 X_train 和 y_train 已准备好与 KFold 一起使用
【解决方案3】:
import pandas as pd

df = pd.read_csv(/path/to/csv, header=None, index_col=False)
x = df.iloc[:,:-1].values
y = df.iloc[:,-1:].values

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 2020-06-11
    • 2015-07-18
    • 2021-05-07
    • 2015-09-06
    • 2017-11-20
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多