特征更多的时候是分类特征,而不是连续的数值特征。 比如一个人的特征可以是``[“male”, “female”]``, ["from Europe", "from US", "from Asia"], ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]。 这样的特征可以高效的编码成整数,例如 ["male", "from US", "uses Internet Explorer"]``可以表示成 ``[0, 1, 3],["female",
"from Asia", "uses Chrome"]``就是``[1, 2, 1]。
from sklearn import preprocessing>>> enc = preprocessing.OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.transform([[0, 1, 3]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])这个的整数特征表示并不能在scikit-learn的估计器中直接使用,因为这样的连续输入,估计器会认为类别之间是有序的,但实际却是无序的。(例如:浏览器的类别数据则是任意排序的)。
批处理实现:多标签
if __name__ == "__main__":
set_ ='multi_label.csv'
label=input_fn(set_)
print(label)
length = len(label)
num =12
#label_one_hot=np.zeros([length, num])
enc = preprocessing.OneHotEncoder()
enc.fit(label)
label_one_hot = enc.transform(label).toarray()
print(label_one_hot)def text2vec(text):
text_len = len(text)
if text_len > MAX_CAPTCHA:
raise ValueError('验证码最长4个字符')
vector = np.zeros(MAX_CAPTCHA*CHAR_SET_LEN)
def char2pos(c):
if c =='_':
k = 62
return k
k = ord(c)-48
if k > 9:
k = ord(c) - 55
if k > 35:
k = ord(c) - 61
if k > 61:
raise ValueError('No Map')
return k
for i, c in enumerate(text):
idx = i * CHAR_SET_LEN + char2pos(c)
vector[idx] = 1
return vectordef dense_to_one_hot(labels_dense, num_classes):
" Convert class labels from scalars to one-hot vectors."""
number_labels=labels_dense.shape[0]
index_offset=np.arange(number_labels)*num_classes
labels_one_hot=np.zeros((number_labels, num_classes))
labels_one_hot.flat[index_offset+labels_dense.ravel()] = 1
return labels_one_hot

850

被折叠的 条评论
为什么被折叠?



