在大多数Scikit学习算法中,数据必须作为Bunch对象加载。例如,教程中的load_files()或其他函数用于填充Bunch对象。像load_files()这样的函数希望数据以某种格式存在,但我的数据以不同的格式存储,即每个字段都有字符串的CSV文件。
我如何解析它并以Bunch对象格式加载数据?
你可以这样做:
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)
您不必创建Bunch对象。它们只适用于加载scikit learn的内部样本数据集。
您可以直接将Python字符串列表提供给矢量器对象。
这是一个癌症威斯康星州乳腺癌(诊断)数据集的例子,您可以在Kaggle:中找到CSV文件
-
CSV文件中32处的第2列为
X_train
和X_test
数据@usecols=range(2,32)
,这些数据存储在Bunch中名为data
的对象密钥from numpy import genfromtxt data = genfromtxt("YOUR DATA DIRECTORY", delimiter=',', skip_header=1, usecols=range(2,32))
-
我对CSV文件中的列数据B(Numpy Array@
usecols=(1)
中的列1)感兴趣,因为它是y_train
和y_test
的输出,并且存储在名为:target
的Bunch Object Key中import pandas as pd target = genfromtxt("YOUR DATA DIRECTORY", delimiter=',', skip_header=1, usecols=(1), dtype=str)
有一些技巧可以像在sklearn中一样转换目标,当然它可以在一个唯一的变量
target, target1, ...
中创建,只是为了解释我所做的。 -
首先将numpy转换为Panda
target2 = pd.Series(target)
-
这是为了使用排名功能,你可以跳过步骤5
target3 = target2.rank(method='dense', axis=0)
-
这只适用于在0或1中转换目标,如书籍中的示例
target4 = (target3 % 2 == 0) * 1
-
在numpy 中获取值
target5 = target4.values
在这里,我复制了Hugh Perkins的解决方案:
import sklearn
dataset = sklearn.datasets.base.Bunch(data=data, target=target5)