【问题标题】:How do I create a sklearn.datasets.base.Bunch object in scikit-learn from my own data?如何从我自己的数据中创建 scikit-learn 中的 sklearn.datasets.base.Bunch 对象?
【发布时间】:2013-12-10 03:39:32
【问题描述】:

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

如何解析并加载 Bunch 对象格式的数据?

【问题讨论】:

  • 可以肯定:没有任何算法加载Bunch对象。示例脚本使用这些,但算法都需要数组或稀疏矩阵。
  • @Blake,分类器的 fit 方法接受几个列表对象 - 数据列表 (Bunch.data) 后跟目标列表 (Bunch.target) - clf.fit(<list>, <list>)

标签: scikit-learn scikits


【解决方案1】:

你可以这样做:

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)

【讨论】:

  • @MachineEpsilon 该问题显示了您在如何将数据提供给scikit-learn 中的分类器方面存在误解,因此即使这回答了字面上的问题,也无法消除最初的误解。这个链接很清楚:scikit-learn.org/stable/…
【解决方案2】:

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

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

【讨论】:

  • 谢谢,是否有任何实用功能可以加载 .CSV?有一个包含 for 列(所有字符串)的 csv。现在我正在使用 python csv阅读器docs.python.org/2/library/csv.html
  • 我会推荐 pandas:pandas.pydata.org 不过,您需要将 pandas.DataFrame 转换为 np 数组,然后再将其提供给 sklearn。
【解决方案3】:

这是Breast Cancer Wisconsin (Diagnostic) Data Set的例子,你可以在Kaggle中找到CSV文件:

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

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

    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-07-14
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多