详情请点阅读全文
零、机器学习整个实现过程:
一、机器学习数据组成
【特征工程】:特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性
(如图:文章转为数据即是一个特征工程)
2.特征工程工具:
1、pandas:一个数据读取非常方便以及基本的处理格式的工具
2、sklearn:对于 特征的处理 提供了强大的接口,功能如下
2.1Python语言的机器学习工具:
- Scikit-learn包括许多知名的【机器学习算法】的实现(使用前提:搞懂算法)
- Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。
2.2Scikit-learn安装
安装前提:要有pandas、Numpy、等库
中文文档:https://sklearn.apachecn.org/1
2pip install Scikit-learn
import sklearn2.3数据的特征抽取
特征抽取:特征抽取对文本等数据进行特征值化(把一篇文章转换成数值,就是一个特征抽取)
目的:为了计算机更好理解数据
1、特征抽取实例演示:一句话转化为,二维数组
2、sklearn特征抽取API:sklearn.feature_extraction(feature:特征。extraction:抽取)
3、字典特征抽取:
- 作用:对字典数据进行特征值化
- 类:sklearn.feature_extraction.DictVectorizer
4、文本特征抽取
2.33DictVectorizer语法
语法:DictVectorizer(sparse=True…)
DictVectorizer.fit_transform(X)
- X:字典或者包含字典的迭代器
- 返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X)
- X:array数 组或者sparse矩阵
- 返回值:转换之前数据格式
DictVectorizer.get feature_names()
- 返回类别名称
DictVectorizer.transform(X)
- 按照原先的标准转换
1 | from sklearn.feature_extraction import DictVectorizer |
【one-hot编码】:
One-hot编码用于把类别转换为数值如下:
为防止编号1,2,3,4….有优先级别之分,最终对结果造成影响one-hot编号转换成如下样式:
我们做的是为每个类别生成一个布尔列。这些列中只有- -列可以为每个样本取值1。
因此,术语才叫“一个热”编码。
2.34文本特征抽取
作用:对文本数据进行特征值化
类:sklearn.feature_extraction.text.CountVectorizer
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()
- 返回值:单词列表
2.35【英文处理】直接用fit_transform() 统计次数 特征化:
- 对文章当中所有的词,重复的只看做一 次词的列表。
- 对每篇文章,在词的列表里面进行统计每个词出现的次数
- 单个字母不统计
1 | from sklearn.feature_extraction import DictVectorizer |
2.36【中文处理】先jieba分词,再用fit_transform统计次数 特征化:
中文抽取必须要先进行分词处理。英文每个单词间都有空格,因此不用分词处理。中文只有加了空格才能像如下进代码行分词。
1 | from sklearn.feature_extraction import DictVectorizer |
2.37中文分词处理库:jieba
安装:pip3 install jieba
返回值:词语生成器
1 | import jieba |
2.38中文特征值化(抽取)统计词出现次数
首先用cutword()进行分词,然后
1 | def cutword(): |
3、词的重要程度:TF和IDF
常见文档分类原理:【朴素贝叶斯】
- 【TF-IDF的主要思想是】:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
- 【TF-IDF作用】:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
- 【TF-term frequency:词的频率】:词在当前文档出现频率
- 【★ IDF-inverse document frequency:逆文档频率】:
【公式】: IDF = log ( 总文档数量 / 该词出现的文档数量 )
【log(数值)】: 输入的数值越小,结果越小 - ★ 词在当前文档重要程度 = TF*IDF
【例如】:
- 因为、所以、我们、等等,这些词在每一篇文档可能都会出现但它对区分这篇文档类型并无作用;
- 可用公式计算该词在当前文档重要程度:TF*IDF
4.词重要程度(TF-IDF)sklearn工具库:
类:sklearn.feature_extraction.text.TfidfVectorizer
- 【TfidfVectorizer作用】:分类机器学习算法的的重要依据
- 【最新】:但目前TF-IDF已经比较过时,会有一些新的算法来代替它
TfidfVectorizer语法:
TfidfVectorizer(stop_words=None,…) - 返回词的权重矩阵
- stop_words:忽略哪些词
- TfidfVectorizer.fit_transform(X,y)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵 - TfidfVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式 - TfidfVectorizer.get_feature_names()
返回值:单词列表
汉字语句计算词重要程度示例:
1 | from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer |