第一章 特征工程与文本特征提取
1.数据集的构成
机器学习中的数据集大多以CSV的格式存储,而不是放在MYSQL里(原因:1性能瓶颈,读取速度不够快,2格式不符合),再者pandas 和numpy 功能强大,能够真正实现多线程。
pandas:一个数据读取非常方便以及基本的处理格式的工具
sklearn:对于特征的处理提供了强大的接口
常用的公开数据集特点:
数据集结构:特征值+目标值
注意:有的数据集可以没有目标值
2.特征工程的定义
定义:特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。
3.特征抽取
1.特征抽取针对非连续型数据,比如对文本等进行特征值化,方便计算机更好地理解数据
2.字典数据的抽取:把字典中的类别数据,分别转换为特征。
####### 类:sklearn.feature_extraction.DictVectorizer
##### DictVectorizer.fit_transform(X)
X:字典或者包含字典的迭代器
返回值:返回sparse矩阵
#####DictVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
####DictVectorizer.get_feature_names()
返回类别名称
####DictVectorizer.transform(X)
按照原先的标准转换
from sklearn.feature_extraction import DictVectorizer
def dictvec():
#实例化
dict = DictVectorizer(sparse=False)
#输入数据并转换
data = dict.fit_transform({'city':'北京','tem':'100'})
print(dict.get_feature_names())
print(data)
return None
if __name__=="__main__":
dictvec()
结果如下:
3.文本特征抽取
######类:sklearn.feature_extraction.text.CountVectorizer
####CountVectorizer(max_df=1.0,min_df=1,…)
返回词频矩阵
####CountVectorizer.fit_transform(X,y)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
####CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
####CountVectorizer.get_feature_names()
返回值:单词列表
def countvec():
cv = CountVectorizer()
data = cv.fit_transform(["life is short ,I like python","life is too long,I dont like python"])
print(cv.get_feature_names())
print(data.toarray())
return None
结果:
这里说明一下,单个字母会被过滤掉(不统计),重复的词也只统计一次
中文文本要先进行分词,导入jieba,示例如下`:
def cutword():
cin1=jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
cin2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
cin3=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
cen1=list(cin1)
cen2= list(cin2)
cen3 = list(cin3)
c1=' '.join(cen1)
c2=' '.join(cen2)
c3=' '.join(cen3)
return c1,c2,c3
def countvec():
c1, c2, c3 = cutword()
print(c1, c2, c3)
cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])
print(cv.get_feature_names())
print(data.toarray())
return None
结果如图:
4.TF_IDF
######类:sklearn.feature_extraction.text.TfidfVectorizer
####TfidfVectorizer(stop_words=None,…)
返回词的权重矩阵
####TfidfVectorizer.fit_transform(X,y)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
####TfidfVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
####TfidfVectorizer.get_feature_names()
返回值:单词列表
简单修改上面代码:
def tfidfvec():
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1,c2,c3])
print(tf.get_feature_names())
print(data.toarray())
return None
结果: