Classification
分类是一种有监督的机器学习方法,用于将数据点分类为不同标签的类。 分类算法用于预测某个数据点适合某个类别的概率。 在本文中,我们将使用 Tensorflow 根据花朵的属性对花朵进行分类。
Classification on Flower Dataset
Data
数据集将花分为 3 个不同的物种
- setosa
- versicolor
- viginica.
每朵花有四个属性
- sepal length
- sepal width
- petal length
- petal width
先倒入模块和定义常量
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
import pandas as pd
# constants
CSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
SPECIES = ['Setosa', 'Versicolor', 'Virginica']
然后从tf.keras.utils
加载数据
# load dataset
train_path = tf.keras.utils.get_file(
"iris_training.csv", "https://storage.googleapis.com/download.tensorflow.org/data/iris_training.csv")
test_path = tf.keras.utils.get_file(
"iris_test.csv", "https://storage.googleapis.com/download.tensorflow.org/data/iris_test.csv")
train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0)
test = pd.read_csv(test_path, names=CSV_COLUMN_NAMES, header=0)
keras
是 tensorflow 中的一个模块,其中包含我们可以使用的数据集。 我们可以使用 train.head()
查看我们的数据
特征列
就像线性回归示例一样,我们必须创建特征列。
my_feature_columns = []
for key in train.keys():
my_feature_columns.append(tf.feature_column.numeric_column(key=key))
print(my_feature_columns)
Input Function
然后我们定义输入函数
def input_fn(features, labels, training=True, batch_size=256):
# Convert the inputs to a Dataset.
dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
# Shuffle and repeat if you are in training mode.
if training:
dataset = dataset.shuffle(1000).repeat()
return dataset.batch(batch_size)
Model
有多种模型可供选择,例如DNNClassifier
和Linear Classifier
。 在这里,我们将使用 DNNClassifier
,因为它可以提供更好的结果。
# build a DNN with 2 hidden layers with 30 and 10 hidden nodes each.
classifier = tf.estimator.DNNClassifier(
feature_columns=my_feature_columns,
hidden_units=[30, 10], # Two hidden layers of 30 and 10 nodes respectively.
n_classes=3) # The model must choose between 3 classes.
实际上,这是一个具有以下架构的神经网络。
需要注意的是,隐藏层的神经元数量是任意的,可以进行试验。 尝试更改它们以查看它们如何影响结果!
Training
训练模型
classifier.train(
input_fn=lambda: input_fn(train, train_y, training=True),
steps=5000 # classifier run for 5000 steps
)
Evaluation
看看模型的好坏
eval_result = classifier.evaluate(
input_fn=lambda: input_fn(test, test_y, training=False))
print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))
我们应该得到超过 90% 的准确率。
Conclusion
这是使用 Iris 花数据集对 Tensorflow 和分类算法的简单介绍。 然而,事实上我们可以用数据和模型做很多事情。 并且越来越熟悉 python 和 tensorflow 可以给我们带来更有趣的可视化和结果。下次再见!