目录

  • 0、推荐
  • 1、背景
  • 2、效果图
  • 3、本次实验整体流程
  • 4、这里用词向量,而不是用TF-IDF预处理后的向量
  • 5、源代码
  • 6、知识点普及
    • 6.1随机森林优点
    • 6.2 随机森林缺点

0、推荐

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

1、背景

最近的项目中,用到了很多机器学习的算法,每个机器学习的算法在不同的样本下的精准率是不同的。为了验证每个算法在每种不同样本数量的能力,就做了一下实验,本文讲的是“随机森林”在文本算法中的精准率。

相关其它机器学习算法的精准率:
决策树:机器学习 之 决策树(Decision Tree)文本算法的精确率
逻辑回归:机器学习 之 逻辑回归(LogisticRegression)文本算法的精确率
支持向量机:机器学习 之 支持向量机(SupportVectorMachine)文本算法的精确率
K近邻:机器学习 之 K近邻(K-NearestNeighbor)文本算法的精确率
朴素贝叶斯:机器学习 之 朴素贝叶斯(Naive Bayesian Model)文本算法的精确率

机器学习各个算法对比:人工智能 之 机器学习常用算法总结 及 各个常用分类算法精确率对比

2、效果图

先看一下没有任何调参的情况下的效果吧!

随机森林:

通过以上数据可以看出数据量在小于5000时效果还不错,但数据量到达20000左右时,准确率已经达到了70%左右了。

3、本次实验整体流程

1、先把整体样本读到内存中

2、把整体样本按照8:2的比例,分为80%的训练集,20%的测试集

3、然后“训练集”的样本 先分词,再转换为词向量

4、接着把训练集的样本和标签统一的传入算法中,得到拟合后的模型

5、把“测试集”的样本 先分词,再得到词向量

6、把测试集得出的词向量丢到拟合后的模型中,看得出的结果

7、把结果转换为准确率的形式,最后做成表格形式以便观看

这里应该多跑几遍不同样本,然后把结果取平均值,每次的结果还是稍有不同的。

4、这里用词向量,而不是用TF-IDF预处理后的向量

这里我们直接取得词向量,而不是经过TF-IDF处理过的词向量。如果处理过,效果会不如现在的好。

TF-IDF(词频-逆文本频率),前面的TF也就是常说到的词频,我们之前做的向量化也就是做了文本中各个词的出现频率统计,并作为文本特征,这个很好理解。关键是后面的这个IDF,即“逆文本频率”如何理解。有些句子中的词,比如说“的”,几乎所有句子都会出现,词频虽然高,但是重要性却应该比 主语、宾语等低。IDF就是来帮助我们来反应这个词的重要性的,进而修正仅仅用词频表示的词特征值。
概括来讲, IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低

加了TF-IDF处理后的效果:

经过TF-IDF处理后的效果比不处理效果好。所以,这里就要经过TF-IDF处理了哈。
以下源码中,如果加TF-IDF处理,只需要在jiabaToVector()函数中增加True这个参数就OK了

    vector_train = jiabaToVector(m_text_train, False, True)......vector_test = jiabaToVector(m_text_test, True, True)

5、源代码

import jieba
import datetime
# 向量\测试集\训练集\得分比对
from sklearn.model_selection  import train_test_split
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import accuracy_score
# 随机森林
from sklearn.ensemble import RandomForestClassifier# 忽略警告
import warnings
warnings.filterwarnings("ignore", category=FutureWarning, module="sklearn", lineno=196)m_count = [1000,3000,5000,8000,10000,15000,20000]# all
m_list_allText = []
m_list_allL4ID = []
# 内容的训练集、测试集
m_text_test = []
m_text_train = []
m_label_test = []
m_label_train = []m_map_all = []# 读取文件里面数据,获取标签和内容
def getFile(filename, count):with open(filename, 'r' ,encoding='utf-8') as fp:global m_list_allL4ID,m_list_allTextm_list_allL4ID = []m_list_allText = []for i in range(count):text = fp.readline()if ":" in text:L4ID = text.split(":")[-2]Msg = text.split(":")[-1]m_list_allL4ID.append(L4ID)m_list_allText.append(Msg)# 随机分为 测试集 和 训练集 2-8分
def randomTestAndTrain():# 生成训练集和测试集global m_text_test, m_text_train, m_label_test, m_label_trainm_text_train, m_text_test, m_label_train, m_label_test = train_test_split(m_list_allText, m_list_allL4ID, test_size=0.2, random_state=1)def jiabaToVector(list, isTest, isTFIDF = False):tmp_list = []for sentence in list:tmp_list.append(" ".join(jieba.cut(sentence.strip())))# 利用TFIDF生成词向量transformer = TfidfTransformer()if isTest:if isTFIDF:tfidf = transformer.fit_transform(vectorizer.transform(tmp_list))else:tfidf = vectorizer.transform(tmp_list)else:if isTFIDF:tfidf = transformer.fit_transform(vectorizer.fit_transform(tmp_list))else:tfidf = vectorizer.fit_transform(tmp_list)return tfidf# 创建默认参数
def predict_4(X, Y):clf = RandomForestClassifier()clf = clf.fit(X, Y)return clfdef test(count):# getFile("./rg_test.train", count)getFile("./rg_train_20190102_20181227114134.train", count)# print("获取全部已知数据的label和text")# 随机分为 测试集 和 训练集 2-8分randomTestAndTrain()global vectorizer# 全局向量vectorizer = CountVectorizer()# 生成训练向量vector_train = jiabaToVector(m_text_train, False)# 生成训练向量-tfidf# vector_train = jiabaToVector(m_text_train, False, True)# 数据大小lenall = len(m_list_allText)# print("总集大小:", lenall)print("总集大小:", lenall)# 训练startT_Train = datetime.datetime.now()clf = predict_4(vector_train, m_label_train)endT_Train = datetime.datetime.now()print("训练Time:", (endT_Train - startT_Train).microseconds)# 生成测试向量vector_test = jiabaToVector(m_text_test, True)# 生成测试向量-tfidf# vector_test = jiabaToVector(m_text_test, True, True)# 测试startT = datetime.datetime.now()result = clf.predict(vector_test)endT = datetime.datetime.now()print("测试Time:", (endT - startT).microseconds)# 计算百分比percent = accuracy_score(result, m_label_test)print("准确率:", round(percent, 3))map_all = {}map_all["精确率"]=round(percent, 3)map_all["数据量"]=lenallmap_all["训练时间/us"]=(endT_Train - startT_Train).microsecondsmap_all["测试时间/us"]=(endT - startT).microsecondsm_map_all.append(map_all)if __name__ =="__main__":print ("-- 开始 --")for testC in m_count:test(testC)print ("-- 结束 --")# 打印表格print("数据量\t准确度\t训练时间/us\t测试时间/us")for key in m_map_all:print("%d\t%f\t%d\t%d"%(key["数据量"],key["精确率"],key["训练时间/us"],key["测试时间/us"]))

6、知识点普及

6.1随机森林优点

1、可以处理高维数据,不同进行特征选择(特征子集是随机选择)
2、模型的泛化能力较强
3、训练模型时速度快,成并行化方式,即树之间相互独立
4、模型可以处理不平衡数据,平衡误差
5、最终训练结果,可以对特种额排序,选择比较重要的特征
6、随机森林有袋外数据(OOB),因此不需要单独划分交叉验证集
7、对缺失值、异常值不敏感
8、模型训练结果准确度高
9、相对Bagging能够收敛于更小的泛化误差

6.2 随机森林缺点

1、当数据噪声比较大时,会产生过拟合现象
2、对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响

机器学习 之 随机森林(Random Forest)文本算法的精确率相关推荐

  1. 【机器学习】随机森林 – Random forest

    文章目录 一.随机森林是什么? 1. 随机森林是一种集成学习算法 2. 随机森林的基学习器是决策树 二.随机森林 – Random Forest | RF 三.构造随机森林的 4 个步骤 四.随机森林 ...

  2. 机器学习 之 决策树(Decision Tree)文本算法的精确率

    目录 0.推荐 1.背景 2.效果图 3.本次实验整体流程 4.这里用词向量,而不是TF-IDF预处理后的向量 5.源代码 6.知识点普及 6.1决策树优点 6.2决策树缺点 0.推荐 无意中发现了一 ...

  3. 机器学习 之 逻辑回归(LogisticRegression)文本算法的精确率

    目录 0.推荐 1.背景 2.效果图 3.本次实验整体流程 4.这里用词向量,而不是TF-IDF预处理后的向量 5.源代码 6.知识点普及 6.1逻辑回归优点 6.2逻辑回归缺点 0.推荐 无意中发现 ...

  4. 初勘数据处理之预测算法(随机森林random forest)附matlab源码

    初勘数据处理之预测算法(随机森林random forest)附matlab源码 集成学习方法 集成学习方法,是整合多个分类方法的预测结果,以提高分类准确率.集成学习方法先用训练数据构建一组基分类器,再 ...

  5. 随机森林 – Random forest

    随机森林 – Random forest 随机森林是一种由决策树构成的集成算法,他在很多情况下都能有不错的表现. 本文将介绍随机森林的基本概念.4 个构造步骤.4 种方式的对比评测.10 个优缺点和 ...

  6. 机器学习方法(六):随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经典 ...

  7. 随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经 ...

  8. 通俗解读随机森林Random Forest

    通俗解读随机森林Random Forest 写在前面 1. 什么是集成学习 2. 什么是Bagging 3 随机森林 写在前面 声明:本文主要参考的是周志华老师的<机器学习>西瓜书,参杂了 ...

  9. 【ML】随机森林(Random Forest) 从入门到放弃再到掌握

    目录 集成学习 决策树 Boosting Adaboost GBDT 梯度提升决策树是属于boosting集成学习的一种方法,通过构建多颗CART回归树,每一轮利用上一轮学习器的残差进行树的创建.该残 ...

最新文章

  1. Android studio导出的apk在真机上安装提示“文件不存在或已失效”的解决方法
  2. ipython源代码怎么打开_CentOS 6.4 中IPython如何启动Qt控制台和NoteBook?
  3. 默认标准错误文件linux,Linux中标准输出和标准错误的重导向
  4. Java中的证书透明度验证
  5. 什么是网络光纤收发器?
  6. php的字符串、双引号输出变量的问题、转义字符
  7. 揭秘也门仆人阶层:没食物时吃亲人尸体
  8. Mysql学习总结(29)——MySQL中CHAR和VARCHAR
  9. Facebook广告系统及多账号操作经验分享
  10. 想要挡住对向来车的远光灯,能否把公路中间的隔离墙垒高点来阻挡?
  11. 新增的表单元素 结构伪类选择器
  12. 联调测试是什么意思_阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!...
  13. 高速电路设计与仿真之PCB篇(一)
  14. 4.29 笔记+day7作业
  15. python .center用法_python之testcenter操作
  16. PTA 1072 开学寄语
  17. java wsdl 参数必填设置
  18. 用python计算债券YTM
  19. 阿里云IoT平台APP配网入口
  20. 【ONE·C || 初识C语言 】

热门文章

  1. 诺基亚215 4G支付版上市,预售279元,长辈出门也无需现金了!
  2. Mysql中制表符怎么表示_制表符的用法
  3. eclipse插件开发示例
  4. 34 个最受欢迎的 GitHub JS 存储库
  5. 《MongoDB入门教程》第15篇 文档更新之$inc操作符
  6. 兼容火狐_30个不错的Firefox 3兼容主题
  7. 火狐firefox快速切换代理插件:Proxy Switcher
  8. 老巫婆的编程世界内容积累
  9. 张栗炜虚拟键盘设备驱动
  10. 计算机重启不能启动不了桌面,电脑重启无法进入桌面怎么办