集成k-最近邻(k-NN)、朴素贝叶斯、Logistic回归、支持向量机(SVM)、决策树、随机森林、多层感知机的一个机器学习示例

(1) 创建机器学习所需环境

  1. python版本为Python 3.6.2
  2. **NumPy:**用于使用Python进行数值处理。
  3. **PIL:**一个简单的图像处理库。
  4. **scikit-learn:**包含我们今天要介绍的机器学习算法。
  5. Keras和**TensorFlow:**深度学习,后续使用,本篇博客暂不需要。

(2) 数据集

本示例将使用的是Iris数据集,是入门机器学习的首选,相当于“Hello,World!”。
集成k-最近邻(k-NN)、朴素贝叶斯、Logistic回归、支持向量机(SVM)、决策树、随机森林、多层感知机的一个机器学习示例

图1: Iris数据集是描述鸢尾花的数值数据集。它捕获了它们的萼片和花瓣长度/宽度的测量值。使用这些测量,我们可以尝试用Python和机器学习来预测花种。
Iris数据集可以说是最简单的机器学习数据集之一 ——它通常用于帮助程序员和工程师教授机器学习和模式识别的基础知识。

“Iris数据集”捕获了三种鸢尾花的属性:

  1. Iris Setosa
  2. Iris Versicolor
  3. Iris Virginica

通过四个数值属性量化每种花的种类,均以厘米为单位:萼片长度、萼片宽度、花瓣长度、花瓣宽度。目标是培养机器学习模型,从测量的属性中正确预测花种。

(3) 动手实现

Iris数据集内置于scikit-learn中。我们新建一个python文件, iris_classify .py 在Iris数据集上运行七种机器学习算法,查看结果,并确定哪种算法最合适。
首先从scikit-learn的Python机器学习方法中引入:k-最近邻(k-NN)、朴素贝叶斯、Logistic回归、支持向量机(SVM)、决策树、随机森林、多层感知机。引入将数据分成训练和测试子集的数据集拆分方法。来自scikit-learn的分类报告程序将打印我们的结果。引入内置于scikit-learn的Iris数据集。引入用于命令行参数解析的工具,便于选择参数调整算法。

将模型以为键值对方式存,键是模型的名称(通过命令行参数提供),值是模型本身。这样我们在终端可以使用七种模型中的任一个,示例如下:
python classify_irs.py --model knn

自动加载KNeighborClassifier。这方便地允许我们在一个Python脚本中一次一个地按需调用7个机器学习模型中的任何一个(不需要编辑代码)

继续,加载并拆分数据,将数据分成75%用于训练,25%用于测试。
最后一步是培训和评估我们的模型,最终得出训练结果。

  1. k-最近邻(k-NN)训练结果:
[INFO] loading data...
[INFO] using 'knn' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       0.92      0.92      0.92        12
   virginica       0.91      0.91      0.91        11

   micro avg       0.95      0.95      0.95        38
   macro avg       0.94      0.94      0.94        38
weighted avg       0.95      0.95      0.95        38

Iris数据集,有三种鸢尾属花种的属性:红鸢尾(Iris Setosa)、变色鸢尾(Iris Versicolor)、北美鸢尾(Iris Virginica)。

从以上结果看,Setosa准确度最高,Versicolor其次,Virginica最低。

  1. 朴素贝叶斯训练结果:
[INFO] loading data...
[INFO] using 'naive_bayes' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.92      0.96        12
   virginica       0.92      1.00      0.96        11

   micro avg       0.97      0.97      0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38


  1. Logistic回归:
[INFO] loading data...
[INFO] using 'logit' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.92      0.96        12
   virginica       0.92      1.00      0.96        11

   micro avg       0.97      0.97      0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38
  1. 支持向量机(SVM):
[INFO] loading data...
[INFO] using 'svm' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.92      0.96        12
   virginica       0.92      1.00      0.96        11

   micro avg       0.97      0.97      0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38
  1. 决策树:
[INFO] loading data...
[INFO] using 'decision_tree' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.92      0.96        12
   virginica       0.92      1.00      0.96        11

   micro avg       0.97      0.97      0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38
  1. 随机森林:
[INFO] loading data...
[INFO] using 'random_forest' model
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.83      0.91        12
   virginica       0.85      1.00      0.92        11

   micro avg       0.95      0.95      0.95        38
   macro avg       0.95      0.94      0.94        38
weighted avg       0.96      0.95      0.95        38
  1. 多层感知机:
[INFO] loading data...
[INFO] using 'mlp' model
/Applications/anaconda3/envs/pyimage/lib/python3.6/site-packages/sklearn/neural_network/multilayer_perceptron.py:562: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.
  % self.max_iter, ConvergenceWarning)
[INFO] evaluating...
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.92      0.96        12
   virginica       0.92      1.00      0.96        11

   micro avg       0.97      0.97      0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38

各个算法的详细解析,可以慢慢查看资料。这里不一一说明。
本博客源码在此: