机器学习sklearn中独热编码与向量计数的应用

独热编码主要是对一些非数字的部分文本进行类别表示,对于都是文本的可以使用向量计数,便于计算机进行计算与分类,
常见的有类别特征(包含文本的类别变量)和纯粹的文本特征

独热编码是对类别特征创建不重复的列表,对数据中出现的类别特征分别按照列表中特征顺序进行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())

猜你喜欢

转载自blog.csdn.net/m0_47709941/article/details/124408961
今日推荐