分类算法
classifacation(分类)
analyzing Sentiment(情感分析)
1、【关于饭店评价的例子】
①、智能的餐馆推荐系统
- 将所有评价拆分成每一句,将句子输入到一个情感分类器,告知这是一个积极评价还是消极评价
②、新型的餐馆评论系统
- 找到评论的子集,把筛选好的子集输入到情感分类器,对每个语句的结果求平均值,也可以找出最积极的评论
2、分类的应用
- 分类可以应用在很多地方:图片识别;牢记邮件分类;医疗健诊断康预测
- 例子:FMRI技术 获取大脑的影像,扫描大脑,预测正在阅读的是什么文字/照片,分类器读懂了你的大脑
- 最常见的分类器:线性分类器
3、如何表示线性分类器,它又是如何工作的
- 阈值分类器:计算积极/消极单词的个数 两者谁大就表示是哪一种语句
- 线性分类器:不仅有积极消极单词的列表 还要加入他们的权值(great比good程度要深,great权值更大)中性词 为0 例如 we she 输出是输入的简单叠加 >0为+ ;<0为-
- x:为评论语句(确切只看语句中有情感的单词)
4、回归与分类模型区别
- 回归:用误差平方和测量模型误差
- 分类:讨论那些输入我们预测对了,那些输入我们预测错了,对于数据测试结果的正误判断数量记下来
- 一 误差率 二正确率 相加为1
5、我的分类器到底有多好呢
- 第一个拿来做比较的基准是优于随机猜测的结果 如果有k个特性的话,最差的正确率是1/k
- 大多数类别预测(垃圾邮件比好邮件多)在分类的时候要注意有没有不平衡类别
- 考虑自己的应用,已经这样的正确率有没有意义
6、误差也有多种类型,这种类型称为错误
- 用混淆矩阵来研究这些错误
图混淆矩阵
7、你的模型需要学习多少数据和模型复杂的之间的关系
- 在数据质量好的情况下,数据越多越好
- 多的坏数据比拥有少量很好很清晰高质量的数据要糟糕的多
8、用一些理论技巧来分析我们到底需要多少数据,技巧帮我们理解数据的总体趋势
-
在数据和模型智联关系中有个很重要的指标:学习曲线
-
误差:即使有再多的数据,误差也不会变成0
-
模型的参数越多所需要的数据也就越多,学习曲线的误差随着训练数据集增多就越小
9、前面知识讨论了,预测是否为正面负面,是否为垃圾邮件,现在分析这封邮件是垃圾邮件的概率是多少
我们上面学习了怎么做分类问题、看了分类例子以及这些例子的应用、讨论构建分类的若干模型、如何从数据中构建一个分类器、如何分析分类器
10、③【构建一个核心是分类器的智慧应用】
- 产品评价情绪分析
#导入graphlab库
import graphlab
- 读入一些产品数据(亚马逊上的母婴用品数据集)
products = graphlab.SFrame('amazon.baby.csv')
- 浏览数据
products.head()
结果为:
11、为每条评论建立单词统计向量(build the word count vector for each review)
- 而自己操作需要分词再进行统计
- 文本分析工具提供函数count_word()
#在表格的第四列新增了一个word_count 属性
products['word_count'] = graphlab.text_analytics.count_words(products['review'])
结果为:
- 利用canvas做一些可视化
#利用canvas做一些可视化
graphlab.canvas.set_target('ipynb')
#将产品名称这一列提取出来
products['name'].show()
结果为:
12、对特定产品进行研究
#研究特定产品Vulli Sophie
giraffe_reviews = products[products['name'] = ='Vulli Sophie the Giraffe Teather']
#查看他的点评数量有多少
len(giraffe_reviews)
#得到785
#这一类是分类变量,会得到一张不同点评和产品得到多少分的图
giraffe_reviews['rating'].show(view = 'Categorical')
结果为:
13、做一个情感分类器 build a sentiment classifier
#将产品的评分这一列进行排序再显示 得到一张评价的图表
pruducts['rating'].show(view = 'Categorical')#希望得到的评价是分类性质的数据
结果为:
14、数据工程:定义什么是正面情感,什么是负面情感define what’s a positive and a negative sentiment
- 1、先忽略所有的三星的评价
products = products[products['rating']!=3]
- 2、定义正面(四星,五星)负面情感(一星,二星)
#创建一个新的列叫情感(sentiment) 如果大于4 这一列就是1
products['sentiment'] = products['rating'] >=4
products.head()
结果为:
15、训练我们的情感分析器
#1、将原始数据划分为训练集和测试集
train_data,test_data = products.random_split(.8,seed = 0)
#一个特定的分类器,逻辑回归分类器
sentiment_model = graphlab.logistic_classifier.create(train_data,#第一个参数,训练数据
target='sentiment',#第二个参数,我们要分类的东西是数据表中的情感列
features=['word_count'],#指定使用什么样的特征,用word_count列
validation_set=test_data)#设置验证集validation_set
结果为:
16、讲解ROC曲线
- 建立情感分析模型来评估: evaluate()函数
- 一个特定的计量表最:ROC曲线(受试者工作特征曲线)
- ROC只是用来研究混淆矩阵中的假阴性和假阳性的
#建立情感分析模型来评估 evaluate()函数
sentiment_model.evaluate(test_data,metric = 'roc_curve')
结果为:
sentiment_model.show(view = 'Evaluation')
结果为:
17、通过训练的模型来分析我们的朋友Giraffe的情感状况
giraffe_reviews['predicted_sentiment'] = sentiment_model.predict(giraffe_reviews,output_type='probability')
#排序那些基于预测情感的点评并深入研究 #降序排序
giraffe_reviews = giraffe_reviews.sort('predicted_sentiment',ascending=False)
giraffe_reviews.head()
结果为:
18、对降序后的评论列表进行查看
- 得到第一条评论为:
giraffe_reviews[0]['review'] #查看第一条评论`
- 得到第二条评论为:
giraffe_reviews[1]['review'] #查看第二条评论
- 显示出最负面的评论,因为评论降序排序的
#显示出最负面的评论,因为评论降序排序的
giraffe_reviews[-1]['review']