1 数据的特征抽取
1.1 特征抽取目的
其实就是为了让计算机去更好的理解数据,将各种各样的特种格式转化成标准的数字格式,即特征值化。
1.2 特征抽取实例
字典特征抽取
每一个字典为一个样本,用list将所有的样本储存起来
流程:1. 实例化DictVectorizer 2.调用fit_transform输入数据并转化(sparse = True: 用sparse矩阵返回,节约内存
sparse = False: 返回np.array)其实就是将所有的非数值特征转化成dummy variable。
from sklearn.feauture_extraction import DictVectorizer
def dictvec():
my_dict = [{'city':'北京','temperature':100},{'city':'上海','temperature':60}]
dict = DictVectorizer()
data = dict.fit_transform(my_dict)
feature = dict.get_feauture_names()
original = dict.inverse_transform(data)
if __name__=='__main__':
dictvec()
文本特征抽取
流程:1. 实例化CountVectorizer 2.调用fit_transform输入数据并转化
以上两步其实就是统计每个词在每个样本里出现的次数
返回的array(n*m) n 为样本个数,m为每个特征单词
from sklearn.feauture_extraction import CountVectorizer
def countvec():
my_text = ['I am Cathy and I love coding.','what do you mean I?']
cv = CountVectorizer()
data = cv.fit_transform(my_text)
print(data.toarray())
if __name__=='__main__':
countvec()
如果用中文,则需要先分词:
import jieba
def cutword():
con1 = jieba.cut('我的名字叫,今天,明天会更美好')
#列表生成器变成列表
content1 = list(con1)
content1= ' '.join(content1)
#用空格连接字符返回
return content1
1.3 TF-IDF(term frequency-inverse document frequency)
这是为了解决一些常出现且不具有特征性的文本被误认为是极具特征性的特征的问题,如英文中的一些代词,连接词。引入IDF就是为了统计这个词是否具有普遍性,如果这个词在所有的样本中都出现,那么它其实不具有任何代表样本特征的能力,那么它作为特征的能力应该为最小,这就是定义IDF=log(total document num/the num of documents the word appears in)的意义。
TF*IDF就是某个词的重要性程度。
from sklearn.feature_extraction.text.TfidfVectorizer
#其他的操作和上面的vectorizer是一样的