我正在尝试使用scikit-learn进行一些分类。然而,我在起步和导入数据方面遇到了麻烦。
我正在处理这个数据:成人数据集。
我对numpy和scikit-learn都很陌生,所以我开始按照这个教程的步骤操作,该教程使用葡萄酒数据集。
我的问题是数据被导入为一个由元组组成的1D数组,而不是2D数组。还有缺失的数据,用?
表示。
我的数据集并不完全是数字。有很多字符串。我阅读了genfromtxt文档,其中有处理混合类型数据集的示例。(除了我下面使用的方法外,可能还有更好的方法吗?)
以下是我的代码:
import numpy as np
all_data = np.genfromtxt(open("./adult.data","r"), dtype=[
('age', 'i4'),
('workclass', 'S16'),
('fnlwgt', 'i8'),
('education', 'S12'),
('education_num', 'i4'),
('marital_status', 'S22'),
('occupation', 'S17'),
('relationship', 'S14'),
('race', 'S18'),
('sex', 'S6'),
('capital_gain', 'i8'),
('capital_loss', 'i8'),
('hours_per_week', 'i4'),
('native_country', 'S26'),
('income', 'S5')
],
delimiter=",", autostrip=True,
missing_values=('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'))
# load class labels from column 15
y_adult_labels = all_data['income']
# load the 14 features
X_adult = all_data[:][0:-1]
这将创建一个元组的一维数组,其中每个元组都是原始CSV数据文件中的一行。
为什么这不会创建一个二维数组?(首先,类似于 all_data[:,1:]
这样的东西会导致 IndexError: too many indices for array
。)
我最终想要:
- 将字符串数据映射到数字值(以某种方式...也许使用
genfromtxt
调用中的converters
? - 处理二维数组(例如,PCA)