19

在大多数 Scikit-learn 算法中,数据必须作为 Bunch 对象加载。对于教程中的许多示例 load_files() 或其他函数用于填充 Bunch 对象。像 load_files() 这样的函数期望数据以某种格式存在,但我有以不同格式存储的数据,即每个字段都有字符串的 CSV 文件。

如何解析这个并以 Bunch 对象格式加载数据?

4

3 回答 3

23

你可以这样做:

import numpy as np
import sklearn.datasets

examples = []
examples.append('some text')
examples.append('another example text')
examples.append('example 3')

target = np.zeros((3,), dtype=np.int64)
target[0] = 0
target[1] = 1
target[2] = 0
dataset = sklearn.datasets.base.Bunch(data=examples, target=target)
于 2016-12-21T12:15:03.067 回答
19

您不必创建 Bunch 对象。它们仅用于加载 scikit-learn 的内部样本数据集。

您可以直接将 Python 字符串列表提供给您的矢量化器对象。

于 2013-12-10T10:14:49.540 回答
0

这是威斯康星州乳腺癌(诊断)数据集的示例,您可以在 Kaggle 中找到 CSV 文件:

  1. 从 CSV 文件中的第 2 列第 32 列开始X_trainX_test数据 @usecols=range(2,32)这存储在名为 Bunch Object 的键中data

    from numpy import genfromtxt
    data = genfromtxt("YOUR DATA DIRECTORY", delimiter=',', skip_header=1,  usecols=range(2,32))
    
  2. 我对usecols=(1)CSV 文件中的列数据 B(Numpy Array @ 中的第 1 列)感兴趣,因为它是和的输出,y_train并且y_test存储在名为 Bunch 的对象键中:target

    import pandas as pd
    target = genfromtxt("YOUR DATA DIRECTORY", delimiter=',', skip_header=1, usecols=(1), dtype=str)
    

    有一些技巧可以像在 sklearn 中一样转换目标,当然可以将其制成唯一变量target, target1, ...,仅用于解释我所做的事情。

  3. 首先将 numpy 转换为 Panda

    target2 = pd.Series(target)
    
  4. 这是使用排名功能,你可以跳过第5步

    target3 = target2.rank(method='dense', axis=0)
    
  5. 这仅用于将目标转换为 0 或 1,就像书中的示例一样

    target4 = (target3 % 2 == 0) * 1 
    
  6. 将值放入 numpy

    target5 = target4.values
    

在这里,我复制了 Hugh Perkins 的解决方案:

import sklearn
dataset = sklearn.datasets.base.Bunch(data=data, target=target5)
于 2017-10-14T05:53:39.237 回答