我是Keras
和TF
的新手。我需要加载此数据集:
https://archive.ics.uci.edu/ml/machine-learning-databases/letter-recognition/letter-recognition.data
但是我见过的每个教程都使用内置方法来从MNIST数据集中加载。
我想出了将字母(标签)更改为int(like a->1,b->2,c->3 etc.)
的想法
但是,如何将其分成2组(x-in,y-out)?
答案 0 :(得分:1)
您需要自己解析文件。
为此,您可以执行以下操作:
x_t = []
y_t = []
char_to_int = {}
int_to_char = {}
for i in x.split("\n"):
print(i)
y_t.append(i[0])
x_t.append(i.split(",")[1:])
for i,j in enumerate(sorted(set(y_t))):
char_to_int[j]=i
for i,j in enumerate(sorted(set(y_t))):
int_to_char[i]=j
y_t = [char_to_int[i] for i in y_t]
基本上,您遍历文件并将整数保留为x值。对于y值,您首先要输入字母。但是神经网络无法理解这一点,因此您需要构建一个具有整数到字母映射关系的字典。这就是为什么我们最后再次解析y的原因,所以我们最终得到y值。
现在,您只需要从中制作numpy数组。
答案 1 :(得分:1)
但是我看过的每个教程都使用内置方法。
如果您以前没有尝试过,我建议您使用熊猫。
每个csv文件都需要标头,因为默认情况下该文件没有标头,因此您可以手动添加。通过插入
alphabet, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
在文件的顶部。注意:您应该使用实际的功能名称替换数字,以提高可读性。
import pandas as pd
读取文件:
dataframe = pd.read_csv("example.csv")
自那以来,您说的第一列是可以将其从数据框中删除的标签。
y = dataframe["alphabet"]
剩余列是您可以使用values
属性检索的输入,该属性返回一个numpy数组。
x = dataframe.drop("alphabet", 1).values
#沿着列拖放
现在,您可以在train_test_split
中使用sklearn.model_selection
拆分数据集,也可以使用python索引。
test_size = 0.1
train_samples = int(X_train.shape[0]*(1 - test_size))
X_train, X_test, Y_train, Y_test = x[:train_samples],x[train_samples: ], y[:train_samples], y[train_samples: ]
或
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(x, y,
test_size=test_size)
现在,由于y是numpy个字符数组,因此我们需要将其映射到索引。
mapping = {}
classes = set(y)
for c in classes:
if c not in mapping:
mapping[c] = len(mapping)
y = np.array([mapping[i] for i in y])
现在终于转换为一种热门格式:
from keras.utils import to_categorical
y = to_categorical(y, len(mapping))
答案 2 :(得分:1)
对于小型数据集(如您的情况),我只是从文件中解析并使用迭代器。这是您的数据的alasql(
select(
['*'],
['cities'],
and(low('pop', 3500000)),
orderBy('pop', 'DES')
)
);
示例:
TensorFlow