机器学习:案例探究课程笔记
知识总览
1、Graphlab库安装以及简单介绍
2、Regression回归模型及应用
3、Classification分类模型及应用
4、Cluster聚类模型及应用
5、矩阵分解推荐系统及应用
6、深度学习-神经网络模型及应用
一、Graphlab库安装以及简单介绍
几个需要注意的地方:
- 应该按照graphlab官网的教程安装anaconda2
- 如果已经有anaconda3可以在anaconda3的envs中安装anaconda2来维持兼容性
- 安装完成后你可能在导入包的时候会遇到这种情况:
- 你可以尝试运行get_dependencies()并且在系统环境变量中赋予anaconda写入文件的权利,如果可以的话,最好。
- 不过我是等了一天都没下载好的,于是你可以进入它提示给的网址中自己下载所需要的文件,然后找到get_dependencies()的源码位置进行修改。
比如下载文件的位置在E盘,可进行如下修改。
·
33 xzarchive_file, xzheaders) = urllib.urlretrieve('http://tukaani.org/xz/xz-5.2.1-windows.zip') #注释掉 34 xzarchive_file = 'E:\\xz-5.2.1-windows.zip'35 #xzarchive_dir = tempfile.mkdtemp()#注释掉 36 xzarchive_dir = 'E:\';
43 #(dllarchive_file, dllheaders) = urllib.urlretrieve('http://repo.msys2.org/mingw/x86_64/mingw-w64- x86_64-gcc-libs-5.1.0-1-any.pkg.tar.xz')44 dllarchive_file = 'E:\\mingw-w64-x86_64-gcc-libs-5.1.0-1-any.pkg.tar.xz'45 #dllarchive_dir = tempfile.mkdtemp()46 dllarchive_dir = 'E:\'
然后应该就没有问题了。
在第一周的课程中,介绍的graphlab的基本函数SFrame
通过SFrame我们可以很容易的导入数据。
import graphlab
sf=graphlab.SFrame('data.csv')
graphlab库还可以对数据进行可视化操作,比如使用show函数,见下图,其中graphlab.canvas.set_target(‘ipynb’)是把画布移到当前ipynb
二、Regression回归模型及应用
直接引入问题:探究房价与房子面积的关系
对于模型的选择首先考虑使用线性模型
随后判断这条线该如何选择?通过求得平均残差方的最小值来确定相关参数。
其次,我们考虑这个模型可能是一个二次方函数模型
又或者是13次方
在这里我们引入另外一个概念——过拟合。当选取拟合参数为13的时候,显而易见,这并不是一个好的模型,其过于复杂,模型的复杂程度与模型的误差有如下关系:
代码实现
import graphlab
sales=graphlab.SFrame(home_data.gl)
graphlab.canvas.set_target('ipynb')
sales.show(view='Scatter Plot',x="sqft_living", y="price")#散点图
#随机划分训练集和测试集
train_data,test_data = sales.random_split(.8,seed=0)
#创建线性回归训练模型
sqft_model=graphlab.linear_regression.create(train_data,target='price',features=['sqft_lving'])
#评估测试集结果,得到RMSE
sqft_model.evaluate(test_data)
#获得模型参数
sqft_model.get('coefficients')#预测新的房价
sqft_model.predict(sales[0])
注意features的参数是一个列表。
效果展示:
三、Classification分类模型及应用
分类器有很多应用,本章介绍了线性分类器。
下图介绍了对一个句子进行评定的模型,来判断该句子是积极的还是消极的。
我们首先做了一个简单的模型,假设我们只从两个单词中进行判断,他们分别有1.0和-1.5的权重。
我们可以画出得分为0的点的集合——Decision boundary,决策边界线。
更复杂的情况,decision boundary可以不是线性的。
评估精确度的有趣现象:
百分之九十的正确率是不是很高呢?这取决于我们研究的对象,在随机猜测的情况下,能猜对的概率。
对于大多数模型,存在一个极限Test Error。(笔者本来认为是不存在的hhh)
混淆矩阵,通过混淆矩阵(如下)我们可以得到召回率和准确率。召回率的公式是R = TP/ (TP+FN),TP代表True Positve,其他的类推。召回率(Recall Rate,也叫查全率)是检索出的相关文档数和文档库中所有的相关文档数的比率。在这里,我觉得可以理解为检索出的目标正确的预测数和所有正确预测数的比率。
情感分析代码实现:
import graphlab
products = graphlab.SFrame('amazon_baby.gl/')
#使用文本分析器中的单词计数功能
products['word_count'] = graphlab.text_analytics.count_words(products['review'])
#ignore all 3* reviews
products = products[products['rating'] != 3]
#positive sentiment = 4* or 5* reviews
products['sentiment'] = products['rating'] >=4
train_data,test_data = products.random_split(.8, seed=0)
#使用logistic_classifier创建情感分析器
sentiment_model = graphlab.logistic_classifier.create(train_data, target='sentiment', features=['word_count'], validation_set=test_data)
#注意参数中validation_set在模型建立过程中已经对测试集进行了使用#以概率的形式显示预测结果,这里的概率表示有多大把握说这个是一个大于等于4分的rating
products_reviews['predicted_sentiment']=sentiment_model.predict(products_reviews, output_type='probability')
作业题:对特定的15个词进行评价。
import graphlab
#设置线程限制,节省内存,防止程序崩溃
graphlab.set_runtime_config("GRAPHLAB_DEFAULT_NUM_PYLAMBDA_WORKERS", 8)
#导入数据
products = graphlab.SFrame("amazon_baby.gl/")
#统计评论中的词语
products["word_count"] = graphlab.text_analytics.count_words(products["review"])
#选择12个词作为情感分析的输入
selected_words = ['awesome', 'great', 'fantastic', 'amazing', 'love', 'horrible', 'bad', 'terrible', 'awful', 'wow', 'hate']
#统计每一记录中各个词语的频数
def selected_words_count(dict):value = 0if i in dict:value = dict[i]return value
for i in selected_words:products[i] = products['word_count'] .apply(selected_words_count)
#查看统计结果
products.head()
#---
#统计12个词出现的次数
def count(word):value = 0for i in products["word_count"]:if word in i:value += i.get(word)return value
list = []
for x in selected_words:list.append(count(x))
new_dict = dict(zip(selected_words,list))
print new_dict#去除评论中性的词
products = products[products['rating'] != 3]
#添加新列'sentiment'
products['sentiment'] = products['rating'] >= 4#将数据分为train(80%)和test(20%)两部分
train_data,test_data = products.random_split(.8, seed=0)
selected_words_model=graphlab.logistic_classifier.create(train_data,target='sentiment',features=selected_words,validation_set=test_data)
#打印出每一个参量的系数,注意使用了print_rows函数
selected_words_model['coefficients'].print_rows(num_rows=12)
#评估模型
graphlab.canvas.set_target('ipynb')
selected_words_model.show(view='Evaluation')
由下图我们可以看到召回率以及准确率等参数。
真阳率(True Positive Rate, TPR)就是:
含义是检测出来的真阳性样本数除以所有真实阳性样本数。
假阳率(False Positive Rate, FPR)就是:
含义是检测出来的假阳性样本数除以所有真实阴性样本数。
四、Cluster聚类模型及应用
案例目的:找到一篇文章类似的文章。
方法:找公共词。
由于大多数词语,如‘the’等不具有文章特色,所以我们是有TF-IDF方法来使那些文章中的特色词语凸显出来。
聚类,把相似的点聚在一起。
举例,K-means方法,通过不断更新聚类中心来获得最优解。
聚类代码实现:
import graphlab
people = graphlab.SFrame('people_wiki.gl/')
#维基百科词条数据
#以obama举例
obama['word_count'] = graphlab.text_analytics.count_words(obama['text'])
#通过stack方法对字典进行分类,key和item
obama_word_count_table = obama[['word_count']].stack('word_count', new_column_name = ['word','count'])
#可以通过count数据对整个表进行排序
obama_word_count_table.sort('count',ascending=False)
#对所有数据操作,并使用TF-IDf
people['word_count'] = graphlab.text_analytics.count_words(people['text'])
tfidf =graphlab.text_analytics.tf_idf(people['word_count'])
people['tfidf'] = tfidf
#举例
obama[['tfidf']].stack('tfidf',new_column_name=['word','tfidf']).sort('tfidf',ascending=False)
#创建分类器
knn_model = graphlab.nearest_neighbors.create(people,features=['tfidf'],label='name')
#使用分类对obama进行预测
knn_model.query(obama)
五、矩阵分解推荐系统及应用
常用的方法的预测缺乏个性化或者无法合理利用信息。
比如协同矩阵法:
利用买了这个东西的人也买了那个东西这个信息进行推荐
限制,如果这个人没买过东西呢?如果这个人买了很多东西呢?
我们引入了矩阵分解法,通过用户对不同类型的东西的打分,以及大众对不同东西的打分进行交叉评分,得到属于用户的个性化打分。
代码实现:
import graphlab
song_data = graphlab.SFrame('song_data.gl/')
#使用人口模型,得分最高的被推荐
popularity_model = graphlab.popularity_recommender.create(train_data,user_id='user_id', item_id='song')
#
personnalized_model=graphlab.item_similarity_recommender.create(train_data,user_id='user_id',item_id='song')
作业题
Which of the artists below is the least popular artist, the one with smallest total listen_count, in the data set?
这里要用到groupby(key_columns, operations, *args)
其可以将关键列按给出的列聚合。
i. key_columns , which takes the column we want to group, in our case, ‘artist’
ii. operations , where we define the aggregation operation we using, in our case, we want to sum over the ‘listen_count’.
data = song_data.groupby(key_columns='artist', operations={'total_count': graphlab.aggregate.SUM('listen_count')}).sort('total_count', ascending=False)
print data[0]
print data[-1]
六、深度学习-神经网络模型及应用
如下图,是一个一层的神经网络,通过输出就可以判断出结果。
下图是一个两层的神经网络,我们需要给每一个神经网络线赋值来达到我们想要预测的目的。
大数据时代允许我们有非常大量的数据,我们可以通过神经网络进行更好的训练。比如进行图片识别。
下图是12年竞赛中superVision通过神经网络得到的错误率。
代码实现:
import graphlab
#导入数据
image_train = graphlab.SFrame('image_train_data/')
image_test = graphlab.SFrame('image_test_data/')
#首先尝试使用逻辑分类器
raw_pixel_model=graphlab.logistic_classifier.create(image_train,target='label',features=['image_array'])
#进行预测
raw_pixel_model.predict(image_test[0:4])
#评估模型
raw_pixel_model.evaluate(image_test)
通过该模型得到的结果正确率只有百分之48左右,
我们需要更加深度的特征学习。
#我们从云端下载模型
deep_learning_model =graphlab.load_model('http://s3.amazonaws.com/GraphLab-Datasets/deeplearning/imagenet_model_iter45')
#然后用该模型对我们已有的图片集进行特征提取,得到deep_features
image_train['deep_features'] = deep_learning_model.extract_features(image_train)
然后用该模型对我们已有的图片集进行特征提取,得到deep_features,随后我们再用logistics_classifier进行训练。
deep_features_model = graphlab.logistic_classifier.create(image_train,features=['deep_features'],target='label')
#评估模型
deep_features_model.evaluate(image_test)
这次我们得到正确率为百分之八十左右。
作业题:判断某目标能否用线性分类器得到。
比如我们判断x1 AND x2 AND NOT x3。我们得到以下结果。
x1 x2 x3 | x1 AND x2 AND (NOT x3)
0 0 0 | 0
0 0 1 | 0
0 1 0 | 0
0 1 1 | 0
1 0 0 | 0
1 0 1 | 0
1 1 0 | 1
1 1 1 | 0
通过画图我们可以看出,我们可以用一个平面将目标结果与非目标结果隔离,说明我们可以使用线性分类器进行分离。
机器学习:案例探究课程笔记相关推荐
- 最新《机器学习最优化》课程笔记,38页pdf,Optimization for Machine Learning
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:专知 AI博士笔记系列推荐 周志华<机器学习>手推笔 ...
- 机器学习-Andrew Ng课程笔记
本文是参考Andrew Ng网上课程和别人总结的机器学习笔记,作为笔者学习的参考,笔者主要实现了一些程序问题. 持续更新中- 1 两个参数梯度下降法 现在有一组数据,plot之后如下图 x = np. ...
- 斯坦福21秋季:实用机器学习-李沐课程笔记
课程主页 B站视频 PS:李老师dbq,我尽量将您截的图好看些 1.1 课程介绍 1.2 数据获取
- 《机器学习基石》课程笔记(1)
什么是机器学习 什么是学习?学习是人类通过观察世界积累经验进而获得相应技能的过程.而机器学习则是机器(计算机)通过计算数据,像人类一样积累经验并获得技能的过程. 机器学习更一般化的定义是Improvi ...
- Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究
红色石头的个人网站:redstonewill.com <Convolutional Neural Networks>是Andrw Ng深度学习专项课程中的第四门课.这门课主要介绍卷积神经网 ...
- 李宏毅机器学习完整笔记发布,AI界「最热视频博主」中文课程笔记全开源
点上方"小詹学Python",选择"置顶公众号"第一时间获取干货分享!本文转自:Datawhale 提起李宏毅老师,熟悉机器学习的读者朋友一定不会陌生.很多人选 ...
- 【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新......
之前看过的机器学习课程.本文是相关课程笔记.习题答案.作业源码的电梯. 1 Coursera 斯坦福机器学习课程,Andrew Ng 1.1 说明 课程地址和软件下载 Coursera连接不上(视频无 ...
- Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism
红色石头的个人网站:redstonewill.com <Recurrent Neural Networks>是Andrw Ng深度学习专项课程中的第五门课,也是最后一门课.这门课主要介绍循 ...
- Github标星24300!吴恩达机器学习课程笔记.pdf
个人认为:吴恩达老师的机器学习课程,是初学者入门机器学习的最好的课程!我们整理了笔记(336页),复现的Python代码等资源,文末提供下载. 课程简介 课程地址:https://www.course ...
最新文章
- java培训分享:java培训架构师学习线路图
- 我把 Spring Boot 的 banner 换成了美女,老板说工作不饱和,建议安排加班
- 酸爽! Intellij IDEA 神器居然还藏着这些实用小技巧 !
- 研究生实名举报深圳大学导师强迫学生延迟毕业,违规报销,各方回应
- 未来哲学的六个问题域
- jquery报变量没定义错误的原因
- 物联网-移远M26模块MQTT开发(AT命令)
- linux dpkg未找到命令_Linux安装软件时90%的人会遇到这个报错,如何解决?
- 数据结构专题(二):2.5在链表指定位置插入元素
- VBA学习_3:对象、集合及对象的属性和方法
- deepsort报错 No module named ‘sklearn.utils.linear_assignment_‘ 问题解决
- C语言数据结构——数组的定义与顺序存储
- 系统漏洞是威胁计算机网络安全的形式,系统漏洞是威胁计算机网络安全的形式_网络 安全 银行 漏洞 川企_https 安全受到 威胁(2)...
- 废品回收小程序、APP UNIAPP开发带有用户端和回收员端
- 安卓机自动肝手游脚本
- 第四行记录到第12韩记录
- 《Learning without Forgetting》 论文阅读笔记
- 实现php Curl 调用不同项目中方法
- 白色网站,看久了不爽,segmentfault.com的夜色模式....
- Java语言入门——你好世界
热门文章
- Hadoop 空间不足怎么办?
- Delphi FireDAC 出现[FireDAC][DatS]-32. Variable length column [*] overflow. Value length - [*]
- 2021高级消防设施操作员模拟真题集及答案解析
- java手电筒_android--超级手电筒的开发记录
- 绿灰配色的微信营销PPT模板-优页文档
- 朋友圈如何分享pdf
- 【基于可见光定位的智能超市购物车系统】(四)可见光定位、电机驱动与整车设计
- CF专题(长安大学)
- Java分布式全局ID(一)
- 阿piu传-文档批量上传客户端豆丁版使用帮助