特征工程
字典特征数据抽取
作用:对字典数据进行特征值化
DictVectorizer语法
eg:
from sklearn.feature_extraction import DictVectorizer
X = [{'city':'北京','temperature':100},
{'city':'上海','temperature':60},
{'city':'深圳','temperature':30}]
def dictvec():
dict = DictVectorizer(sparse=False) #实例化了一个对象
data = dict.fit_transform(X)
print(dict.get_feature_names())
print(data)
return None
if __name__ == '__main__':
dictvec()
结果:
分析:
使用dict.dit_transform(X) 得到的是一个ndarray类型的二维数组 用get_feature_names()方法得到的列表作用为对照dit_transform(X) 符合要求的为1 不符合要求的为0 前提是
dict = DictVectorizer(sparse=False)
这里面的sparse 要改为False (默认为True)
文本特征抽取
作用:对文本数据进行特征值化
CountVectorizer语法
def countvec():
cv = CountVectorizer()
data = cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray())
return None
**问题:**如果是中文无法进行分词
解决方案:使用库jieba中的cut方法
def cutword():
cn1 = jieba.cut("人生苦短,我用Python")
cn2 = jieba.cut("人生漫长,我不用Python")
# print(cn1)
content1 = list(cn1)
content2 = list(cn2)
# print(content2)
c1 = " ".join(content1)
c2 = " ".join(content2)
# print(c2)
return c1,c2
def hanzivec():
cv = CountVectorizer()
c1, c2 = cutword()
data = cv.fit_transform([c1, c2])
print(cv.get_feature_names())
print(data.toarray())
return None
结果为:
tfidfVectorizer语法
为什么需要TfidfVectorizer?
答:分类机器学习算法的重要依据
代码实现:
def cutword():
cn1 = jieba.cut("人生苦短,我用Python")
cn2 = jieba.cut("人生漫长,我不用Python")
# print(cn1)
content1 = list(cn1)
content2 = list(cn2)
# print(content2)
c1 = " ".join(content1)
c2 = " ".join(content2)
# print(c2)
return c1,c2
def tfvec():
tf = TfidfVectorizer()
c1, c2 = cutword()
data = tf.fit_transform([c1, c2])
print(tf.get_feature_names())
print(data.toarray())
return None
结果:
结果表明:tf方法可以测试出某一个词组的概率,概率即为重要性,用该词作为该文章的关键词。