如何使用Turi Create创建一个机器学习应用程序
Turi Create是由苹果公司开发的一个开源的python库,用于创建监督和无监督学习的核心机器学习模型。这些模型通过简化自定义机器学习模型的开发,被用于分类、对象检测、风格转移、回归和推荐系统。
Turi Create很容易使用,因为它关注的是任务而不是算法,并且有随时可以部署的工具。这就是为什么它在建立机器学习模型时被用作scikit-learn的替代品。
在本教程中,我们将开始使用Turi Create,向我们展示如何读取CSV文件,使用SFrames创建数据框架,数据操作,最后使用这个包创建一个机器学习模型。我们将按照从数据处理、训练和测试我们的模型的不同步骤建立一个机器模型。最后,我们将使用我们的模型来进行预测。
前提条件
- 对Python有良好的理解。
开始使用Turi Create
Turi Create已经建立了分类、回归和聚类的算法。支持的算法有以下几种。
分类算法
- Logistic回归。
- 最近的邻居分类器。
- 支持向量机(SVM)。
- 提升的决策树。
- 随机森林。
- 决策树。
回归算法
- 线性回归
- 提升的决策树
聚类算法
- K-均值聚类。
- 基于密度的带噪声的空间聚类应用(DBSCAN)。
为了开始工作,我们需要使用以下命令将Turi Create安装到我们的机器中。
pip install turicreate
数据操作
在本教程中,我们将建立一个用于糖尿病风险预测的机器学习模型。
该数据集包含一个新的糖尿病患者的体征和症状。这将有助于训练和建立我们的模型。最后,我们将使用这个模型来进行预测。
我们的数据概览如图所示。
初始化数据集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时,支持以下数据格式。
- CSV文件--逗号分隔的值。
- SFrame目录档案--以前保存过SFrame的目录。
- 一般的文本文件。
- 一个Python字典。
- Pandas DataFrame。
- 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以更有效地创建机器学习模型的人是有益的。