如何使用Turi Create创建一个机器学习应用程序

602 阅读7分钟

如何使用Turi Create创建一个机器学习应用程序

Turi Create是由苹果公司开发的一个开源的python库,用于创建监督和无监督学习的核心机器学习模型。这些模型通过简化自定义机器学习模型的开发,被用于分类、对象检测、风格转移、回归和推荐系统。

Turi Create很容易使用,因为它关注的是任务而不是算法,并且有随时可以部署的工具。这就是为什么它在建立机器学习模型时被用作scikit-learn的替代品。

在本教程中,我们将开始使用Turi Create,向我们展示如何读取CSV文件,使用SFrames创建数据框架,数据操作,最后使用这个包创建一个机器学习模型。我们将按照从数据处理、训练和测试我们的模型的不同步骤建立一个机器模型。最后,我们将使用我们的模型来进行预测。

前提条件

  • 对Python有良好的理解。

开始使用Turi Create

Turi Create已经建立了分类、回归和聚类的算法。支持的算法有以下几种。

分类算法

  1. Logistic回归。
  2. 最近的邻居分类器。
  3. 支持向量机(SVM)。
  4. 提升的决策树。
  5. 随机森林。
  6. 决策树。

回归算法

  1. 线性回归
  2. 提升的决策树

聚类算法

  1. K-均值聚类。
  2. 基于密度的带噪声的空间聚类应用(DBSCAN)。

为了开始工作,我们需要使用以下命令将Turi Create安装到我们的机器中。

pip install turicreate

数据操作

在本教程中,我们将建立一个用于糖尿病风险预测的机器学习模型。

该数据集包含一个新的糖尿病患者的体征和症状。这将有助于训练和建立我们的模型。最后,我们将使用这个模型来进行预测。

我们的数据概览如图所示。Dataset Overview

初始化数据集URL

dataset_url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv"

加载Turi Create包

我们需要将Turi Create导入我们的机器,这样我们就可以使用它了。

import turicreate as tc

使用SFrame加载数据集

SFrame是一个可扩展的数据框架,用于读取糖尿病数据CSV文件。

df = tc.SFrame(dataset_url)

输出

Downloading https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv to /var/tmp/turicreate-root/59/2862b7a9-30ed-4b77-b817-7535c7012ac0.csv
Finished parsing file https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv
Parsing completed. Parsed 100 lines in 0.031653 secs.
------------------------------------------------------
Types from first 200 line(s)
column_type_hints=[int,str,str,str,str,str,str,str,str,str,str,str,str,str,str,str,str]
If parse fail then correct
the  type list pass it to read the csv in
the column_type_hints argument
------------------------------------------------------
Finished parsing file https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv
Parsing completed. Parsed 520 lines in 0.014424 secs.

数据集的性质

请运行以下命令,向我们展示我们的数据是如何结构化的。

df.head()

检查数据类型

这将返回数据集中每一列的数据类型。

df.dtype()

输出

[int,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str,
 str]

我们的数据集的第一列是一个整数,其余的列是字符串,如我们的输出所示。

绘制类分布图

我们将用这个来让我们更深入地了解我们的类的性质,以图表的形式绘制出来。

df['class'].show()

获取目标和特征

我们首先需要得到我们所有的列,以挑选我们用作特征和目标的东西。

df.column_names()

输出

['Age',
 'Gender',
 'Polyuria',
 'Polydipsia',
 'sudden weight loss',
 'weakness',
 'Polyphagia',
 'Genital thrush',
 'visual blurring',
 'Itching',
 'Irritability',
 'delayed healing',
 'partial paresis',
 'muscle stiffness',
 'Alopecia',
 'Obesity',
 'class']

题为class 的列是我们的目标变量。

获取特征

特征是独立变量,将作为用户输入。用户将能够把这些输入输入到系统中,以便系统进行预测。下面显示的所有feature_names ,是模型将用来进行预测的,用户必须输入这些内容。

feature_names = ['Age',
 'Gender',
 'Polyuria',
 'Polydipsia',
 'sudden weight loss',
 'weakness',
 'Polyphagia',
 'Genital thrush',
 'visual blurring',
 'Itching',
 'Irritability',
 'delayed healing',
 'partial paresis',
 'muscle stiffness',
 'Alopecia',
 'Obesity']

建立机器学习模型

在这个阶段,我们将开始使用上述给定的数据集建立我们的模型。在开始之前,我们需要将我们的数据集分成训练集和测试集。训练集将是75%,测试集将是25%。

数据集的分割

train_data,test_data = df.random_split(0.75)

原始数据的形状

df.shape()

输出

(520, 17)

我们的训练集的形状

train_data.shape

输出

(390, 17)

将我们的数据分割成训练集和测试集后,我们可以开始建立我们的模型。

建模算法

TuriCreate支持不同的分类算法,在我们的案例中,我们将使用Logistic回归。我们使用逻辑回归,因为我们的模型有一个二进制输出。因此,我们的输出可以是正数或负数,以显示一个人是否有患糖尿病的风险。

Logistic回归更适合我们的问题,因为这种算法有更高的准确性,而且不太倾向于过度拟合。

  • 要使用逻辑回归算法,请使用以下命令。
logistic_model = tc.logistic_classifier.create(train_data,target='class',features=feature_names)

输出

PROGRESS: Creating validation set data from 75% of train_data.


Logistic regression:
--------------------------------------------------------
Number of examples: 350
Number of classes: 2
Number of feature columns: 16
Number of unpacked features: 16
Number of coefficients: 17
Starting Newton Method
--------------------------------------------------------
+-----------+----------+--------------+-------------------+---------------------+
| Iteration | Passes   | Elapsed Time | Training Accuracy | Validation Accuracy |
+-----------+----------+--------------+-------------------+---------------------+
| 1         | 2        | 0.014390    | 0.927183         | 0.897374            |
| 2         | 3        | 0.016456    | 0.931734         | 0.843725            |
| 3         | 4        | 0.018732    | 0.949024         | 0.843725            |
| 4         | 5        | 0.020935    | 0.957320         | 0.843725            |
| 5         | 6        | 0.023619    | 0.960135         | 0.843725            |
| 7         | 8        | 0.026907    | 0.969716         | 0.843725            |
+-----------+----------+--------------+-------------------+---------------------+
SUCCESS: Optimal solution found.

TuriCreate对数据集进行多次迭代,在每次迭代后得到 "训练准确率 "和 "验证准确率"。这里我们迭代了七次,七次迭代后的训练精度和验证精度将分别为0.969716和0.843725。

获取模型摘要

训练完我们的模型后,我们现在可以检查模型摘要。模型摘要向我们展示了所有可用的类和特征类。模型摘要让我们对我们的模型有更深入的了解,使我们能够衡量我们的模型在进行预测时是否会有良好的效果。

logistic_model.summary()

输出

Class                          : LogisticClassifier

Schema
------
Number of coefficients: 17
Number of examples: 350
Number of classes: 2
Number of feature columns: 16
Number of unpacked features: 16

Hyperparameters
---------------
L1 penalty                     : 0.0
L2 penalty                     : 0.01

Training Summary
----------------
Solver: newton
Solver iterations: 7
Solver status                  : SUCCESS: Optimal solution found.
Training time (sec)            : 0.0333

Settings
--------
Log-likelihood: 42.9568

Highest Positive Coefficients
-----------------------------
Gender[Female]                 : 5.1663
Irritability[Yes]              : 3.5232
Itching[No]                    : 3.4068
Polyuria[Yes]                  : 3.2939
Genital thrush[Yes]            : 2.4532

Lowest Negative Coefficients
----------------------------
Polydipsia[No]                 : -6.5078
Alopecia[No]                   : -0.8826
weakness[No]                   : -0.283
Age                            : -0.0729

模型评估

这是评估我们的模型,找出它的学习效果如何。我们通过使用test_data 来做到这一点。

metrics = logistic_model.evaluate(test_data)
  • 使用下面的命令来获得模型的准确性。
metrics
metrics['accuracy']

进行预测

进行预测的规则

要进行预测,你必须提交一个SFrame作为输入。SFrame意味着可扩展的数据框架。它的列可伸缩的数据框架对象可以扩展到大数据,并且可以轻松地增加和减少列。

它也使我们的模型能够轻松地读取用户的输入。在构建SFrame时,支持以下数据格式。

  1. CSV文件--逗号分隔的值。
  2. SFrame目录档案--以前保存过SFrame的目录。
  3. 一般的文本文件。
  4. 一个Python字典。
  5. Pandas DataFrame。
  6. JSON。

示例SFrame

运行下面的命令来创建一个样本SFrame。

sf = {'Age': 41,
 'Alopecia': 'Yes',
 'Gender': 'Male',
 'Genital thrush': 'No',
 'Irritability': 'No',
 'Itching': 'Yes',
 'Obesity': 'No',
 'Polydipsia': 'No',
 'Polyphagia': 'Yes',
 'Polyuria': 'Yes',
 'class': 'Positive',
 'delayed healing': 'Yes',
 'muscle stiffness': 'Yes',
 'partial paresis': 'No',
 'sudden weight loss': 'No',
 'visual blurring': 'No',
 'weakness': 'Yes'}

从创建的SFrame中读取

prediction1 = tc.SFrame({'data':[sf.values()]})

进行预测

下面的命令将被用来使用上述SFrame作为输入进行预测。

logistic_model.predict(prediction1)

输出将是正数或负数,以显示一个人是否可能处于危险之中。

  • 获得预测的概率。
logistic_model.classify(prediction1)

保存模型

使用下面的命令来保存我们的模型。

logistic_model.save('diabetes_prediction.model')

总结

在本教程中,我们已经学会了如何使用Turi Create创建一个机器学习模型。我们首先创建了SFrames来加载我们的数据集。然后,我们进行了数据处理,以了解我们正在处理的数据的结构。

最后,在充分了解我们的数据后,我们建立了一个机器学习模型来预测一个人是否有患糖尿病的风险。

这个教程对那些想学习TuriCreate以更有效地创建机器学习模型的人是有益的。