我想用scikit训练一个分类器,但是首先要做的是我需要加载相应的数据。我正在使用以下可用的数据文件:
https://archive.ics.uci.edu/ml/machine-learning-databases/yeast/
当我用文字打开它时,它具有以下内容:
ADT1_YEAST 0.58 0.61 0.47 0.13 0.50 0.00 0.48 0.22 MIT
ADT2_YEAST 0.43 0.67 0.48 0.27 0.50 0.00 0.53 0.22 MIT
ADT3_YEAST 0.64 0.62 0.49 0.15 0.50 0.00 0.53 0.22 MIT
AAR2_YEAST 0.58 0.44 0.57 0.13 0.50 0.00 0.54 0.22 NUC
每个文件都用双倍空格隔开,每行都有回车符。
我想用以下命令阅读它:
f=open("yeast.data")
data = np.loadtxt(f,delimiter=" ")
最后,我希望能够使用以下内容:
X = data[:,:-1] # select all columns except the last
y = data[:, -1] # select the last column
用于:
X_train, X_test, y_train, y_test = train_test_split(X, y)
但是当我尝试阅读它时,出现以下错误:
ValueError: could not convert string to float: ADT1_YEAST
那么如何在Python中读取此文件以在以后使用MLPClassifier?
谢谢
答案 0 :(得分:1)
您可以跳过f=open(...)
,并且可以使用dtype='O'
来确保numpy
以数字和字符串的混合形式读取它。由于链接文件中数据结构的某些不一致之处,最好使用genfromtxt
而不是loadtxt
:
data = np.genfromtxt('yeast.data',dtype='O')
>>> data
array([[b'ADT1_YEAST', b'0.58', b'0.61', ..., b'0.48', b'0.22', b'MIT'],
[b'ADT2_YEAST', b'0.43', b'0.67', ..., b'0.53', b'0.22', b'MIT'],
[b'ADT3_YEAST', b'0.64', b'0.62', ..., b'0.53', b'0.22', b'MIT'],
...,
[b'ZNRP_YEAST', b'0.67', b'0.57', ..., b'0.56', b'0.22', b'ME2'],
[b'ZUO1_YEAST', b'0.43', b'0.40', ..., b'0.53', b'0.39', b'NUC'],
[b'G6PD_YEAST', b'0.65', b'0.54', ..., b'0.53', b'0.22', b'CYT']], dtype=object)
>>> data.shape
(1484, 10)
您可以在调用genfromtxt
时更改dtype(请参阅documentation),也可以像这样手动更改它们:
data[:,0] = data[:,0].astype(str)
data[:,1:-1]= data[:,1:-1].astype(float)
data[:,-1] = data[:,-1].astype(str)
>>> data
array([['ADT1_YEAST', 0.58, 0.61, ..., 0.48, 0.22, 'MIT'],
['ADT2_YEAST', 0.43, 0.67, ..., 0.53, 0.22, 'MIT'],
['ADT3_YEAST', 0.64, 0.62, ..., 0.53, 0.22, 'MIT'],
...,
['ZNRP_YEAST', 0.67, 0.57, ..., 0.56, 0.22, 'ME2'],
['ZUO1_YEAST', 0.43, 0.4, ..., 0.53, 0.39, 'NUC'],
['G6PD_YEAST', 0.65, 0.54, ..., 0.53, 0.22, 'CYT']], dtype=object)