Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

A brief introduction to Machine Learning

8,582 views

Published on

Video: https://www.youtube.com/watch?v=M_DUmyRIkQ8&list=PLTUHmtFhYC6iEwu4h2REYhNKCHFFHYngS&index=13

Published in: Engineering
  • Very useful material! And I'd like to share an amazing free online training software - ezTalks:Free for up to 100 Participants,Group Video/Audio/IM Chat, Screen Sharing, Whiteboard and Recording,etc.(https://www.eztalks.com)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

A brief introduction to Machine Learning

  1. 1. A brief introduction to Machine Learning https://ihower.tw RubyConf China 2017
  2. 2. 我是谁 • 张⽂文钿 a.k.a. ihower • https://ihower.tw • Ruby on Rails 实战圣经 作者 • 全栈营研究员 • Ruby Developer user since 2006 • 过去两年年业余关注机器学习技术
  3. 3. Agenda • 什什么是机器学习 • 搭建机器学习系统 • 什什么是深度学习 • 如何在 Rails 项⽬目中使⽤用机器学习
  4. 4. 1. 什什么是机器学习
  5. 5. 要解决什什么问题? • 如何判断是不是垃圾邮件? • 如何预测⼴广告点击率? • 如何分类客户评论的情绪? • 如何推荐客户想买的东⻄西? • 如何辨识语⾳音? • 如何辨识图片?
  6. 6. 机器学习 • 让电脑⾃自⼰己去学,⽽而不⽤用明确的写条件判断程序 • 所谓学习,就是学怎么分类下判断 • 如何学?需要透过历史数据和机器学习算法,让电脑学出 ⼀一个模型,透过这个模型来进⾏行行预测和辨识。
  7. 7. 机器学习的基本过程 训练数据 Training Data 机器学习算法 Algorithm 机器学习模型 Model
  8. 8. 训练数据 Training Data 机器学习算法 Algorithm 机器学习模型 Model 新的数据 预测结果
  9. 9. 先从回答Yes/No开始 Binary Classification
  10. 10. 历史数据 年年紀 性別 資產 ⾏行行業 … 會不會買 21 M 120 … 會 50 F 800 … 不會 41 F 400 … 會 35 M 300 … 會 36 M 500 … 不會 28 M 60 … 不會 55 F 950 … 會
  11. 11. 转换成训练数据 X1 (Feature 1) X2 (Feature 2) Y (Label 答案) 21 120 1 50 800 -1 41 400 1 35 300 1 36 500 -1 28 60 -1 55 950 1
  12. 12. 感知器(Perceptron) 例例如,在⼆二维(两个 features )的情况: 拿第⼀一个数据来看,希望预测的结果是 1 如果是 d 维(d个 features )的情况:
  13. 13. 怎么求权重 w ?
 假设只有两个 feature,就会是个⼆二维问题可以做图⽰示意 Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  14. 14. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程 怎么求权重 w ?
 假设只有两个 feature,就会是个⼆二维问题可以做图⽰示意
  15. 15. Perceptron Learning Algorithm (PLA) • 先假设 w = 0,然后依序走访所有分错的点 X_n • 让 让下⼀一个 w 朝分错的点偏移 • 最后的 w 就是解 Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  16. 16. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  17. 17. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  18. 18. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  19. 19. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  20. 20. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  21. 21. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  22. 22. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  23. 23. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  24. 24. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  25. 25. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  26. 26. Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  27. 27. Pocket PLA • 不⼀一定线性可分 • 改成随机找⼀一个错误的点 • 在有限的次数内,找最好的w Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  28. 28. 机器学习的种类
  29. 29. 机器学习的种类 • 监督式学习 (Supervised Learning) • 半监督式学习 (Semi-supervised Learning) • 非监督式学习 (Unsupervised Learning) • 强化学习 (Reinforcement Learning)
  30. 30. 监督式学习 数据中有答案(label) 让算法可以学习 • 分类 (Classification) • ⼆二元分类 • 多元分类 • 回归 (Regression) 数值 • 价格 • 下雨机率
  31. 31. 半监督式学习 资料中有些有答案(label) 让算法可以学习 • 例例如照片分类,有些照片有 label,有些没有
  32. 32. 非監督式學習 数据中没答案,需要算法⾃自⼰己找出数据中隐藏的结构或规则 • 分群(Clustering) • K-means 算法 • 异常值侦测 • 深度学习 ⽣生成对抗⽹网络(GAN) • ⽤用于模仿图片、视频等 Credit: https://en.wikipedia.org/wiki/Cluster_analysis
  33. 33. 强化学习 • 透过外在的讯号不断改进算法 • 不容易易直接⽰示范答案(y),但可以透过环境的 反应得知结果好或不好 • 例例如:训练⼩小狗坐下 https://en.wikipedia.org/wiki/Reinforcement_learning
  34. 34. 常⻅见的监督式学习算法 • Linear Regression 、Linear Classifier • Logistic Regression • Decision Tree、Random forest • Naive Bayes classifiers • Support Vector Machine (SVM) • Artificial Neural Network (ANN)
  35. 35. 线性回归(Linear Regression) • 优化均⽅方误差 • 有公式解 • 但数据量量⼤大时,会改⽤用 Gradient Descent 梯度下降法
  36. 36. Gradient Descent 已知 f(w) 如何找出最⼩小值 w ? Image Credit: edX BerkeleyX: CS190.1x Scalable Machine Learning
  37. 37. http://lukaszkujawa.github.io//gradient-descent.html
  38. 38. # https://github.com/daugaard/linear-regression # gem install ruby_linear_regression require 'ruby_linear_regression' x_data = [ [1,1], [2,2], [3,3], [4,4] ] y_data = [ 1,2,3,4 ] linear_regression = RubyLinearRegression.new linear_regression.load_training_data(x_data, y_data) linear_regression.train_gradient_descent(0.0005, 1000, true) prediction_x = [5, 5] prediction_y = linear_regression.predict(prediction_x) puts prediction_y
  39. 39. Nonlinear Transformation 非线性变换 • 例例如⼆二次⽅方变换,把
 
 
 扩展成 Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  40. 40. Logistic Regression • 输出 0~1 的值 • ⽤用于机率预测、⻛风险、可能性,⼜又叫 "soft" binary classification
  41. 41. # gem install liblinear-ruby # https://github.com/kei500/liblinear-ruby # https://www.practicalai.io/implementing-classification-using- logistic-regression-in-ruby/ require 'liblinear' model = Liblinear.train( { solver_type: Liblinear::L2R_LR }, # L2-regularized logistic [-1, -1, 1, 1], # labels [[-2, -2], [-1, -1], [1, 1], [2, 2]], # training data ) puts Liblinear.predict(model, [0.5, 0.5])
  42. 42. Binary 推⼴广到 Mutilclass • OVA (One-Versus-All) 或叫做 One-vs-Rest (OvR) • 有多少类别就各做⼀一次 binary classification • 选分类机率最⼤大的
  43. 43. Decision Tree • 决策树、分类树 • 由上⽽而下在每⼀一步选择⼀一个最 好的属性(feature)来分裂决策 树 • 優點:有很好的解释性
  44. 44. http://www.r2d3.us/visual-intro- to-machine-learning-part-1/
  45. 45. # https://github.com/igrigorik/decisiontree # gem install decisiontree # gem install graphr require 'decisiontree' attributes = ['Age', 'Education', 'Income', 'Marital Status'] training = [ ['36-55', 'Masters', 'High', 'Single', 1], ['18-35', 'High School', 'Low', 'Single', 0], ['< 18', 'High School', 'Low', 'Married', 1] ] dec_tree = DecisionTree::ID3Tree.new(attributes, training, 1, :discrete) dec_tree.train test = ['< 18', 'High School', 'Low', 'Single', 0] decision = dec_tree.predict(test) puts "Predicted: #{decision} ... True decision: #{test.last}"; dec_tree.graph("discrete")
  46. 46. ⽀支持向量量機 SVM
 (Support Vector Machine) • 如何让分类器更更能抵抗杂讯?找⼀一条最胖(margin)的线 • 离边界最近的点就决定线 (这些点就叫做 support vector candidate),其他点不影响结果 • 优点:精确度好、但计算很花时间,不适合巨量量数据 Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  47. 47. # gem install rb-libsvm # https://www.practicalai.io/implementing-classification-using-a-svm- in-ruby/ require 'libsvm' # This library is namespaced. problem = Libsvm::Problem.new parameter = Libsvm::SvmParameter.new parameter.cache_size = 1 # in megabytes parameter.eps = 0.001 parameter.c = 10 examples = [ [1,0,1], [-1,0,-1] ].map {|ary| Libsvm::Node.features(ary) } labels = [1, -1] problem.set_examples(labels, examples) model = Libsvm::Model.train(problem, parameter) pred = model.predict(Libsvm::Node.features(1, 1, 1)) puts "Example [1, 1, 1] - Predicted #{pred}"
  48. 48. awesome-ruby • https://github.com/arbox/machine-learning-with-ruby
  49. 49. FAQ • 机器学习什什么都可以学吗? • ⼀一定要⼤大量量数据吗? • 机器预测的结果就⼀一定准吗?
  50. 50. 2.搭建机器学习系统
  51. 51. 重点是算法吗?
  52. 52. 在实际的应⽤用场景中, 还有很多⿇麻烦事.....
  53. 53. • 数据如何收集? • 会不会有缺漏或错误? 数据需要清理理 • Features 如何决定? 把所有 Features 全部丢进算法可以吗? • 计算需要数字,可是很多数据是字符串串啊 • 原始数据怎么处理理?例例如图片、影像、声⾳音 • 有的 feature 数字很⼤大、有的 feature 数字很⼩小怎么办? • 如何挑选和评估模型? • 如何整合进应⽤用中? • 数据量量超级⼤大怎么办?
  54. 54. 算法只是全部流程中的⼀一部分 其实这是⼀一场数据科学实验
  55. 55. 机器学习的完整流程 • 数据收集、撷取 • 数据探索 (Exploratory data analysis)、视觉化 • 数据清理理、预处理理 • 数据切分 (Train data, Test data) • 选择算法、建立模型、评估模型 • 整合进应⽤用程序 (或进⾏行行发表)
  56. 56. 数据撷取、收集 • 爬⾍虫 (HTML) • 结构化的数据 • 数据库 • 非结构化的数据 • 图片、声⾳音、⽂文字
  57. 57. 预处理理 • 缺失值处理理: 删除或补全 • 标准化数值 • 让平均是0、标准差是 1 • 让不同 features 的数值能够公平,消除数量量级的影响 • 类别 (categorical) 资料编码 • 有顺序的,可⽤用数字 • 没顺序的,⽤用 one-hot encoding
  58. 58. One-Hot-Encoding • 例例如 { “IE”, “Chrome”, “Safari” } 三个分类 • 转成三种 features • “IE” => [ 1 0 0 ] • “Chrome” => [ 0 1 0 ] • “Safari” => [ 0 0 1 ] • 如果维度太多,可以考虑进⼀一步做 Feature Hashing
  59. 59. Feature Extraction (特征萃取) • 将数据中有利利于分类的特征撷取出来, 可能需要将数据视觉化,帮助 我们理理解数据进⾏行行挑选 • 需要 Domain Knowledge,引入額外特徵 • 已知⽤用⼾戶 Geolocation,增加該地點的⼈人⼝口統計數據(平均收入、⼈人 ⼝口密度等等) • 家庭⽤用電隨著溫度升⾼高,因此預測⽤用電量量時,應該把溫度加入特徵 • 原始数据若若是非数字的,需要想办法撷取出数字特征 • 例例如:图片/声⾳音/⾃自然语⾔言⽂文字
  60. 60. Bag of Words (词袋模型) (1) John likes to watch movies. Mary likes movies too. (2) John also likes to watch football games. [1, 2, 1, 1, 2, 0, 0, 0, 1, 1] [1, 1, 1, 1, 0, 1, 1, 1, 0, 0] [ "John", "likes", "to", "watch", "movies", "also", "football", "games", "Mary", "too" ] https://zh.wikipedia.org/zh-cn/词袋模型
  61. 61. Feature 越多越好? 模型越厉害越好? 让算法做到 100% 准确?
  62. 62. Overfitting 过拟合现象 Image Credit: edX BerkeleyX: CS190.1x Scalable Machine Learning
  63. 63. Overfitting 过拟合现象 Credit: 林林軒⽥田老師 http://www.csie.ntu.edu.tw/~htlin/mooc/ 機器學習課程
  64. 64. 考虑的越复杂,结果却 越不准!
  65. 65. ⽣生活中的例例⼦子 • 饮食,⼈人类喜欢吃脂肪、糖、盐 • 运动,⻄西洋剑和跆拳道,电⼦子计分 • 激励机制 KPI,例例如猎⼈人头公司的 KPI 如果⽤用安排⾯面试次 数....
  66. 66. ⼈人的思考也是⼀一样
  67. 67. Overfitting 怎么解? • 当 features 太多,或模型太厉害的时候 • Overfitting 怎么解 • 减少 features,挑选真正有⽤用的 • 减少模型复杂度,例例如增加 regularization 正则化、剪枝、 Early Stop…etc 在计算过程中去惩罚复杂模型
  68. 68. Underfitting 怎么解? • 当 Training dataset 和 Validation dataset 准确率都不⾼高时 • 增加 features、增加⾼高次⽅方变项 • 模型不够复杂,换更更厉害的算法 • 数据太少,想办法增加数据
  69. 69. 数据切分和模型评估 如何得知⽬目前是⽋欠拟合还是过拟合?需要仪表板 • 切分 Training Dataset 和 Testing Dataset,通常约 7:3 • 当 Training dataset 跟 Validation dataset 准确率都不好 => Underfitting • 当 Training dataset 准确率提⾼高,但是 Validation dataset 准确率 却下降时 => Overfitting • 如何挑选和评估模型? • 需要换不同 model 进⾏行行实验 • 如果⽤用 Gradient Descent 梯度下降法:需要调整超参数
  70. 70. 更更像是在做科学实验.... • 不知道哪⼀一个算法比较好 • 需要不断实验和比较结果 • 如果每个算法的⽤用法都不⼀一致,就会很⿇麻烦
  71. 71. 现成的 Ruby ML ⼯工具 • ⽤用法都不同 • 缺乏 预处理理功能 • 缺乏 Cross-Validation 功能 • 缺乏维护.... • 很像是 Toy Project…
  72. 72. Sorry… Ruby 没办法做个流程 ⽬目前主流是 Python 和 R 语⾔言 😵
  73. 73. Python ⼯工具介紹 • Scikit-learn: Python 的 Machine Learning 框架 • Pandas: 提供 Data frames 數據分析 • Matplotlib 視覺化⼯工具 • Jupyter notebook 實驗簿 • PySpark ⼤大數據處理理
  74. 74. Scikit-learn • Scikit-learn 提供⼀一致的數據格式 • 提供各種機器學習和預處理理算法,可以在相同的介⾯面下進 ⾏行行快速實驗 • 已是⾏行行業標準
  75. 75. http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
  76. 76. Jupyter notebook Demo
  77. 77. 鳶尾花根據花萼、花瓣長寬 判斷三種品種
  78. 78. 3. 深度学习 近來來最夯的機器學習算法
  79. 79. Credit: http://www.cnblogs.com/gpcuster/archive/2008/06/03/1213008.html ⼈人⼯工神经⽹网络
  80. 80. Credit: 李宏毅 深度學習課程 Neuron
  81. 81. Credit: 李宏毅 深度學習課程
  82. 82. Credit: 李宏毅 深度學習課程
  83. 83. 權重w怎麼算? https://zh.wikipedia.org/wiki/反向传播算法
  84. 84. MNIST 数据集:⼿手写数字辨识 • 28*28=784 pixel • 假設有⼀一層 Hidden layer 有 100 個 Neuron • 784*100+100*10 = 
 约八万个权重值 • 学习过程要很久,但是预测很快 http://yann.lecun.com/exdb/mnist/
  85. 85. # https://github.com/tangledpath/ruby-fann require 'ruby-fann' train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]]) fann = RubyFann::Standard.new(:num_inputs=>3, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1) fann.train_on_data(train, 1000, 10, 0.1) # 1000 max_epochs, 10 errors between reports and 0.1 desired MSE (mean-squared-error) puts fann.run([0.3, 0.2, 0.4])
  86. 86. http://playground.tensorflow.org
  87. 87. Credit: 李宏毅 深度學習課程
  88. 88. 深度学习特点 • 直接处理理原始数据,不需要⼈人⼯工撷取 feature:可以处理理图片、 声⾳音、⾃自然语⾔言 • 以前不⾏行行做是因为算⼒力力不够强⼤大、数据量量不够多,⽆无法处理理深 层⽹网络 • 优点:可以处理理很⾼高度复杂的问题,例例如影像和声⾳音辨识 • 缺点:1. 训练难度较⾼高,模型太复杂不容易易控制 2. 解释性差, 只知道模型好不好,很难解释为什什么
  89. 89. 卷积神经⽹网络 • Convolutional Neural Network (CNN) • ANN 做圖片辨識做不好,計算量量太⼤大 • CNN 針對圖片的特性做調整 • Convolution Layer • Max pooling Credit: 李宏毅 深度學習課程
  90. 90. https://www.ted.com/talks/ fei_fei_li_how_we_re_teaching_computers_to_understand_
  91. 91. http://www.image-net.org
  92. 92. Credit: 了了解⼈人⼯工智慧的第⼀一本書 松尾豐 全球視覺辨識⼤大賽
  93. 93. 深度学习⼯工具 • Google 的 Tensorflow • Facebook 的 Caffe • 微軟的 CNTK • MXNet (Amazon官⽅方推薦) • PyTorch • Theano
  94. 94. 硬件战场 • Nvidia GPU (CUDA 架構) • Google TPU • Intel Movidius • Apple “Neural Engine” chip (iPhone X)
  95. 95. Keras • https://keras.io • ⼀一个⾼高阶的 API,底层可以跑 TensorFlow、CNTK 或 Theano
  96. 96. model = Sequential() model.add(Dense(512, input_shape=(784,))) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(10)) model.add(Activation('softmax')) model.summary() model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, Y_test)) score = model.evaluate(X_test, Y_test, verbose=0) print('Test score:', score[0]) print('Test accuracy:', score[1])
  97. 97. 4. 如何整合进 Rails
  98. 98. 训练部分 • 继续⽤用 Ruby (are you serious?) • ⽤用 Python 或 R ⽅方案 • ⼤大数据:⽤用 Apache Spark
  99. 99. 预测部分 • 汇出 model 参数,⽤用 Ruby 实作预测 • But…. How about feature engineering part? • 调⽤用 Python 程序 • Web API ⽅方案: ⽤用 flask • RPC ⽅方案 grpc • pycall 直接調⽤用 python function • 第三⽅方 API (GCP,AWS,Azure)
  100. 100. Apple Core ML https://developer.apple.com/documentation/coreml
  101. 101. Cloud Solution • Amazon Web Service • Google Cloud Platform • Microsoft Azure
  102. 102. Google Cloud • ⽤用⾃自⼰己的资料做训练 • Cloud Machine Learning Engine • Machine Learning as API ⽤用现成的模型 • Cloud Vision • Cloud Speech • Cloud Natural Language • Cloud Translation API • Cloud Video Intelligence
  103. 103. # gem install google-cloud-vision # export GOOGLE_CLOUD_PROJECT=“<project-id>“ # export GOOGLE_CLOUD_KEYFILE=“<json-key-file>“ require "google/cloud/vision" vision = Google::Cloud::Vision.new image = vision.image "demo-image.jpg" puts image.labels https://cloud.google.com/vision/
  104. 104. What’s next?
  105. 105. ⼀一些想法 • 数据科学家(Data Scientist) v.s. 数据⼯工程师(Data Engineer) • 不⼀一定要成为数据科学家才能利利⽤用机器学习 • A.I. is a feature,we will just use it as a gem • ⼯工程师及早参与,最后才能成功进入产品,⽽而不是只是数据 科学报告
  106. 106. 如何学机器学习 • Top-down 或 bottom-up 学习法? • 机器学习开发者的现代化路路径:不需要从统计学微积分 开始 
 http://www.csdn.net/article/2015-08-27/2825551
 https://machinelearningmastery.com/dont-implement- machine-learning-algorithms/ • Coursera 的机器学习课程则偏理理论
  107. 107. 参考资料 • 台灣⼤大學 林林軒⽥田 / 機器學習基⽯石、機器學習技術
 http://www.csie.ntu.edu.tw/~htlin/mooc/ • 台灣⼤大學 李宏毅 / ⼀一天搞懂深度學習 
 https://www.slideshare.net/tw_dsconf/ss-62245351 • edX BerkeleyX: CS190.1x Scalable Machine Learning • SciRuby Machine Learning Current Status and Future
 https://speakerdeck.com/mrkn/sciruby-machine-learning-current-status-and-future • 李俊良 / Feature Engineering in Machine Learning 
 https://www.slideshare.net/tw_dsconf/feature-engineering-in-machine-learning • Python Machine Learning, Packt Publishing • Data Science from Scratch, O’Reilly

×