特征抽取对文本等数据进行特征值化。
sklearn特征抽取API:sklearn.feature_ extraction
作用:对字典数据进行特征值化
类: sklearn.feature_ extraction.DictVectorizer
DictVectorizer语法:
DictVectorizer(sparse=True...)DictVectorizer.fit_ _transform(X)DictVectorizer.inverse_ _transform(X)DictVectorizer.get_ feature_ names()DictVectorizer.transform(X)示例:
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""
字典数据抽取
:return: None
"""
# 实例化
dict = DictVectorizer()
# 调用fit_transform
data = dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}])
print(dict.get_feature_names())
print(data)
return None
if __name__ == "__main__":
dictvec()
结果为:

DictVectorizer中默认sparse=True,若sparse=False,则:
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""
字典数据抽取
:return: None
"""
# 实例化
dict = DictVectorizer(sparse=False)
# 调用fit_transform
data = dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}])
print(dict.get_feature_names())
print(data)
return None
if __name__ == "__main__":
dictvec()
效果为:

注意:
①字典数据抽取:把字典中一些类别数据,分别进行转换成特征值
②数组形式,有类别的这些特征先要转换字典数据
作用:对文本数据进行特征值化
类:sklearn.feature extraction.text.CountVectorizer
CountVectorizer语法:
CountVectorizer()CountVectorier.fit_ _transform(X)CountVectorizer.inverse_ transform(X)CountVectorizer.get feature_ names()示例:
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
"""
对文本进行特征值化
:return: None
"""
cv = CountVectorizer()
# 1. 统计所有文章当中所有的词,重复的只看作一次(词的列表)cv.get_feature_names()
# 2. 对每篇文章,在词的列表里面进行统计每个词出现的次数
# 3. 单个字母不统计
data = cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
print(data)
print("*" * 50)
print(cv.get_feature_names())
print("*"*50)
print(data.toarray())
return None
if __name__ == "__main__":
countvec()
结果为:

但注意:
这种方法不支持单个中文字,需要对中文进行分词才能详细的进行特征值化。
示例:
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutword():
con1 = jieba.cut("我与父亲不相见已有二年余了,我最不能忘记的是他的背影。")
con2 = jieba.cut("那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子,我从北京到徐州,打算跟着父亲奔丧回家。")
con3 = jieba.cut("这些日子,家中光景很是惨淡,一半为了丧事,一半为了父亲赋闲。")
# 转换成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con2)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1,c2,c3
def hanzivec():
"""
对文本进行特征值化
:return: None
"""
c1,c2,c3 = cutword()
print(c1,c2,c3)
cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])
print(data)
print("*" * 50)
print(cv.get_feature_names())
print("*"*50)
print(data.toarray())
return None
if __name__ == "__main__":
hanzivec()
结果为:

sklearn.feature_ extractionJtext.TfidfVectorizer
5. TfidfVectorizer语法:
① TfidfVectorizer(stop_ _words=None...)
返回词的权重矩阵
②TfidfVectorizer.fit_ _transform(X)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
③TfidfVectorizer.inverse_ _transform(X)
●X:array数组或者sparse矩阵
返回值:转换之前数据格式
④TfidfVectorizer.get_ _feature_ names()
返回值:单词列表
示例:
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cutword():
con1 = jieba.cut("我与父亲不相见已有二年余了,我最不能忘记的是他的背影。")
con2 = jieba.cut("那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子,我从北京到徐州,打算跟着父亲奔丧回家。")
con3 = jieba.cut("这些日子,家中光景很是惨淡,一半为了丧事,一半为了父亲赋闲。")
# 转换成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con2)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1,c2,c3
def tfidfvec():
"""
对文本进行特征值化
:return: None
"""
c1,c2,c3 = cutword()
print(c1,c2,c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1,c2,c3])
print(data)
print("*" * 50)
print(tf.get_feature_names())
print("*"*50)
print(data.toarray())
return None
if __name__ == "__main__":
tfidfvec()
结果为:


sklearn归一化API: sklearn.preprocessing.MinMaxScaler
作用:使某一 个特征对最终结果不会造成更大影响。
MinMaxScaler语法:
MinMaxScalar(feature_ range=(0,1)..)MinMaxScalar.fit_ _transform(X)[n_ samples,n_ features]示例:
from sklearn.preprocessing import MinMaxScaler
def mm():
"""
归一化处理
:return:None
"""
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__":
mm()
结果为:

归一化总结


sklearn特征化API: scikit-learn.preprocessing.StandardScaler
StandardScaler语法:
①StandardScaler(..)
处理之后每列来说所有数据都聚集在均值0附近标准差差
②StandardScaler.fit_ _transform(X)
X:numpy array格式的数据[n_ _samples,n_ features]
返回值:转换后的形状相同的array
③StandardScaler.mean_
原始数据中每 列特征的平均值
④StandardScaler.std_
原始数据每列特征的方差
示例;
from sklearn.preprocessing import StandardScaler
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()
结果为:

标准化总结:
在已有样本足够多的情况下比较稳定,适合
现代嘈杂大数据场景。
总结:


2.插补需使用from sklearn.impute import SimpleImputer