Ever tried , Ever failed !
No matter ,Try again ! Fail again , Fail better !

数据特征值的提取(sklearn特征抽取API)

一、字典特征提取

1.作用:对字典数据进行特征化
2.类:

sklearn.feature_extraction.DictVectorizer

3.DictVectorizer语法介绍:

DictVectorizer(sparse=True,…)
(1)DictVectorizer.fit_transform(X)       
    X:字典或者包含字典的迭代器
    返回值:返回sparse矩阵
(2)DictVectorizer.inverse_transform(X)
    X:array数组或者sparse矩阵
    返回值:转换之前数据格式
(3)DictVectorizer.get_feature_names()
    返回类别名称
(4)DictVectorizer.transform(X)
    按照原先的标准转换

4.实例:

#字典数据特征值化
from sklearn.feature_extraction import DictVectorizer
dic=DictVectorizer(sparse=False)  # 实例化类,sparse参数默认True,返回sparse矩阵
# 调用fit_transform方法输入数据并转换
data=dic.fit_transform([
    {'city': '北京', 'temperature': 100},
    {'city': '上海', 'temperature': 60},
    {'city': '深圳', 'temperature': 30}
    ])
print("特征值:", dic.get_feature_names())  # 获取特征值名字 
print(data)

运行结果:

特征值: ['city=上海', 'city=北京', 'city=深圳', 'temperature']
[[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

二、文本特征抽取

1.作用:对文本数据进行特征值化
2.类:

sklearn.feature_extraction.text.CountVectorizer

3.CountVectorizer语法

    (1)CountVectorizer(max_df=1.0,min_df=1,…)
        返回词频矩阵
    (2)CountVectorizer.fit_transform(X,y)       
        X:文本或者包含文本字符串的可迭代对象
        返回值:返回sparse矩阵
    (3)CountVectorizer.inverse_transform(X)
        X:array数组或者sparse矩阵
        返回值:转换之前数据格式
    (4)CountVectorizer.get_feature_names()
        返回值:单词列表

4.实例:

#文本数据特征值化
from sklearn.feature_extraction.text import CountVectorizer
wor=CountVectorizer()  #实例化类
data=wor.fit_transform(["life is short, I like python","life is too long, I dislike python"])
print("特征值:", wor.get_feature_names())
print(data.toarray()) #注意返回格式,利用toarray()进行sparse矩阵转换array数组

运行结果:

特征值: ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]

三、对中文进行分词

1.安装jieba包

pip install jieba

2.流程:
(1)准备句子,利用jieba.cut进行分词
(2)实例化CountVectorizer
(3)将分词结果变成字符串当作fit_transform的输入值

案例:对下面三段话进行特征值化
(1)今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。
(2)我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。
(3)如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。

代码:

import jieba
from sklearn.feature_extraction.text import CountVectorizer

d1='今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天'
d2='我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去'
d3='如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。'
#分词后转为列表类型
jb1 = list(jieba.cut(d1)) 
jb2 = list(jieba.cut(d2))
jb3 = list(jieba.cut(d3))
#拼接空格在两个分词之间
c1 = ' '.join(jb1)
c2 = ' '.join(jb2)
c3 = ' '.join(jb3)
wor=CountVectorizer() #实例化类
data = wor.fit_transform([c1, c2, c3]) #用jieba处理后的中文按空格分词
print("特征值:", wor.get_feature_names())
print(data.toarray())# 注意返回格式,利用toarray()进行sparse矩阵转换array数组

运行结果:

特征值: ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]

四、TF-IDF

1.TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
2.TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
3.类:

sklearn.feature_extraction.text.TfidfVectorizer

4.TfidfVectorizer语法

(1)TfidfVectorizer(stop_words=None,…)
    返回词的权重矩阵
(2)TfidfVectorizer.fit_transform(X,y)       
    X:文本或者包含文本字符串的可迭代对象
    返回值:返回sparse矩阵
(3)TfidfVectorizer.inverse_transform(X)
    X:array数组或者sparse矩阵
    返回值:转换之前数据格式
(4)TfidfVectorizer.get_feature_names()
    返回值:单词列表

5.实例:

from sklearn.feature_extraction.text import TfidfVectorizer
tf=TfidfVectorizer()
d1='今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天'
d2='我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去'
d3='如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。'
#分词后转为列表类型
jb1 = list(jieba.cut(d1)) 
jb2 = list(jieba.cut(d2))
jb3 = list(jieba.cut(d3))
#拼接空格在两个分词之间
c1 = ' '.join(jb1)
c2 = ' '.join(jb2)
c3 = ' '.join(jb3)
data=tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())

运行结果:

['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]
赞(1) 打赏
未经允许不得转载:Mr. Almost的个人博客 » 数据特征值的提取(sklearn特征抽取API)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

谢谢老板~

支付宝扫一扫打赏

微信扫一扫打赏