One_hot编码批处理实现

特征更多的时候是分类特征,而不是连续的数值特征。 比如一个人的特征可以是``[“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 vector
def 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






猜你喜欢

转载自blog.csdn.net/bill_zhang5/article/details/79082710