- 类别特征
- 原数据特征
- 特征列表
- 独热编码转换后数据特征
- 文本特征
- 原数据特征
- 特征列表
- 独热编码转换后数据特征
- 代码
独热编码主要是对一些非数字的部分文本进行类别表示,对于都是文本的可以使用向量计数,便于计算机进行计算与分类,
常见的有类别特征(包含文本的类别变量)和纯粹的文本特征
独热编码是对类别特征创建不重复的列表,对数据中出现的类别特征分别按照列表中特征顺序进行0,1赋值,可以这样理解,假设一开始列表中特征都设为0,每个特征的独热编码就是对出现的特征赋值1
向量计数是对向量特征在文本中出现的次数进行计数,它是特征列表中每个特征的数量
类别特征比如数据中除了包含年龄等数字还有人的名字等类别特征,无法用数字代替,需要进行独热编码,如果数据特征较多,会形成稀疏矩阵,可以设置稀疏矩阵的紧凑表示方法,sparse=True
vec = DictVectorizer(sparse=True, dtype=int)
原数据特征
特征列表data= [
{“name”: “张三”, “born”: 1992},
{“name”: “李四”, “born”: 1993}, ]
独热编码转换后数据特征[‘born’, ‘name=张三’, ‘name=李四’]
文本特征[[1992 1 0]
[1993 0 1]]
第一种方法对文本中每个特征进行计数,第二种方法是利用TF-IDF将文本词频统计在内,可以防止那些词频出现频繁的单词赋予过大的权重,这样特征编码是0到1之间的数值
原数据特征特征列表sample = [
“feature engineering”,
“feature selection”,
“feature extraction”, ]
独热编码转换后数据特征[‘engineering’, ‘extraction’, ‘feature’, ‘selection’]
第一种方法
[[1 0 1 0]
[0 0 1 1]
[0 1 1 0]]
第二种方法
[[0.861037 0. 0.50854232 0. ]
[0. 0. 0.50854232 0.861037 ]
[0. 0.861037 0.50854232 0. ]]
可以看到出现次数最多的特征feature,也就是第三列占的权重降低了
代码#######################################
"""
sklearn_learn中类别变量和
文本特征表示对独热编码的应用
独热编码是按照特征列表对每个类变量或者文本进行赋值0,1
"""
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
##############类别变量表示#############
data= [
{"name": "张三", "born": 1992},
{"name": "李四", "born": 1993},
]
#独热编码由DictVectorizer提供,会对字典里的数据进行自动编码
#当sparse=True表示稀疏矩阵的紧凑表示
vec = DictVectorizer(sparse=False, dtype=int)
vec_ = vec.fit_transform(data)
print(vec_)
print(vec.get_feature_names())
###############独文本特征表示###########
sample = [
"feature engineering",
"feature selection",
"feature extraction",
]
vec = CountVectorizer()
x = vec.fit_transform(sample)
#默认x是一个稀疏矩阵,手动检测需要转换为数组
print(x.toarray())
print(vec.get_feature_names())
#上面方法得到X独热编码无法知道文本中词语出现的频率高低
#可以通过TF-IDF方法知道
vec = TfidfVectorizer()
X = vec.fit_transform(sample)
print(X.toarray())
print(vec.get_feature_names())
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)