03_day1_特征工程
1、文本特征抽取
what is 文本特征抽取?
文本 --> number
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
方法:
用途:文本分类、情感分析
1、count
类:sklearn.feature_extraction.text.CountVectorizer
作用:对文本数据进行特征值化
语法:
流程:
1.实例化类CountVectorizer
2.调用fit_transform方法输入data并转换
代码:
def countVect(): """ 文本data抽取 :return: None """ # 1. 实例化 cv = CountVectorizer() # 2.调用fit_transform转换data text1 = ["life is short,i like python", "life is too long,i dislike python"] text = ["生活很短,我喜欢python", "生活太久了,我不喜欢python"] data = cv.fit_transform(text) # 3.print result print(cv.get_feature_names()) # return list of word print(data.toarray()) # sparse矩阵 转换成 array二维 # print(cv.inverse_transform(data)) # 基本用不到 if __name__ == '__main__': countVect()
result:
两个 is
分析:
对于单个英文字母不统计:没有分类依据(无情感、不反映主题)
2、对中文文本特征化
1.如何去对中文文本特征值化?
中文分词---> 特征提取
result:
空格分开
不支持单个中文字!
2. jieba分词
流程:
coding:
def zhCNVect(): """ 中文特征值化 :return: None """ c1,c2,c3 = cutWord() # 实例化CountVectorizer ch_v = CountVectorizer() # fit_transfrom 文本转换成num data = ch_v.fit_transform([c1,c2,c3]) # print result print(ch_v.get_feature_names()) print(data.toarray()) def cutWord(): # jieba.cut 分词 input1 = "今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。" input2 ="我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。" input3 ="如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。" con1 = jieba.cut(input1) con2 = jieba.cut(input2) con3 = jieba.cut(input3) # 转换成list content1 = list(con1) content2 = list(con2) content3 = list(con3) # list转换成str c1 = " ".join(content1) c2 = " ".join(content2) c3 = " ".join(content3) print(c1,c2,c3) return c1,c2,c3 if __name__ == '__main__': # dictVec() # countVect() zhCNVect()
result:
3、tfidf
如何通过词语占比判定文章类型?
NO!中性词的次数,我们,明天等
tfidf:朴素贝叶斯
tf: term frequency 词的频率
(出现的count)
idf: inverse document frequency 逆文档频率
log(总文档数量/该词出现的文档数量)
log(数值):输入的值越小,结果越小
tf * idf 重要性程度
类:sklearn.feature_extracion.text.TfidfVectorizer
语法:
代码:
def cutWord(): # jieba.cut 分词 input1 = "今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。" input2 ="我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。" input3 ="如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。" con1 = jieba.cut(input1) con2 = jieba.cut(input2) con3 = jieba.cut(input3) # 转换成list content1 = list(con1) content2 = list(con2) content3 = list(con3) # list转换成str c1 = " ".join(content1) c2 = " ".join(content2) c3 = " ".join(content3) print(c1,c2,c3) return c1,c2,c3 def tfidfvec(): """ 中文特征值化 :return: """ c1,c2,c3 = cutWord() # 实例化CountVectorizer tf = TfidfVectorizer() # fit_transfrom 文本转换成num data = tf.fit_transform([c1,c2,c3]) # print result print(tf.get_feature_names()) print(data.toarray()) if __name__ == '__main__': tfidfvec()
重要性
why need TfidfVectorizer?
图片的分类 后面讲
2、data的特征预处理
1、what is 特征处理?
统计方法,要求的data
2、 特征预处理的方式
3、sklearn特征处理api
sklearn.preprocessing
there are all 预处理method
4、归一化
1. what is 归一化?
原始data -----变换、映射----> [0,1]
2. 公式:
3.计算过程
4. sklearn归一化api
sklearn.preprocessing.MinMaxScalar
scalar缩放
5.语法
6.步骤
input:二维array
7.代码
def minmaxSclar(): """ 归一化处理 :return: None """ # mm = MinMaxScaler() mm = MinMaxScaler(feature_range=(2,3)) data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]]) print(data) if __name__ == '__main__': minmaxSclar()
8.归一化案例:约会对象data
三个特征同等重要的时候,进行归一化
目的:
使得某一个特征对result不会造成更大的影响
9.异常点
10. 归一化总结
鲁棒性较差 (稳定性不行)
传统精确小data场景 (基本无)
5、标准化
1、 what is 标准化?
原始data ----> 均值为0,方差为1
2、公式
3、异常点
对mean影响不大
方差为0,所有这个特征的值基本一样
4.结合归一化来谈标准化
5.sklearn特征化API
scikit-learn.preprocessing.StandardScalar
6.语法
data聚集zai 均值为0 方差为1的附近
7.步骤
input 二维array
8.代码
def stand(): """ 标准化缩放 :return:None """ std = StandardScaler() data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]]) print(data) if __name__ == '__main__': stand()
9.总结
3、缺失值
1.如何处理数据中的缺失值?方法
2.sklearn缺失值API:
sklearn.preprocessing.Imputer
3.语法
missing_values 缺失值为空值
strategy 填补策略
axis 1/0 行/列
4.流程
5.代码
def im(): """ 缺失值处理 :return: None """ # NaN,nan 空值 im = Imputer(missing_values="NaN",strategy="mean",axis=0) data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]]) print(data) return None if __name__ == '__main__': im()
6.关于np.nan(np.NaN)
总结:
