利用sklearn分析鸢尾花
前面两篇文章提到了机器学习的入门的几个基础库及拓展练习,现在我们就对前面知识点进行汇总进行一个简单的机器学习应用,并构建模型。
练习即假定一名植物专家收集了每一朵鸢尾花的测量数据:花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米。这些数据经过植物学专家分类成三个种类:setosa、versicolor、virginica。然后根据测量数据,确定每朵鸢尾花所属的品种,在这里我们将构建一个机器学习模型,从已知的品种进行学习,从而能够预测新的品种。
在这篇博客里面,我们以鸢尾花数据集来测试,这个数据集包含在scikit-learn的datasets模块中,我们可以调用load_iris函数来加载数据:
from sklearn.datasets import load_iris
iris_dataset = load_iris()
print("Keys of iris_dataset:\n{}".format(iris_dataset.keys()))
# load_iris返回的iris对象是一个Bunch对象,与字典非常相似,里面包含键和值
Out[]:
Keys of iris_dataset:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
DESCR键对应的值是数据集的简要说明,比如:
print(iris_dataset['DESCR'][:193] + "\n...")
Out[]:
Iris Plants Database
====================
Notes
-----
Data Set Characteristics:
:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, predictive att
...
而我们打印iris_dataset
可以看到,target_get键对应的是一个字符串数组,里面包含我们需要预测的花的品种。
feature_names键对应的值是一个字符串列表,对每一个特征进行了说明:
print("Feature names:\n{}".format(iris_dataset['feature_names']))
Out[]:
Feature names:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
数据包含在target和data字段中。data里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为NumPy数组。
data数组的每一行对应一朵花,列代表每朵花的四个测量数据:
print("Shape of data:{}".format(iris_dataset['data'].shape))
Out[]:
# 数组中包含150朵不同的花的测量数据,机器学习中的个体叫做样本,属性叫作特征,data数组的形状(shape)是样本数乘以特征数
Shape of data:(150, 4)
我们可以输出前五个样本的特征数值:
print("First five rows of data:\n{}".format(iris_dataset['data'][:5]))
Out[]:
First five rows of data:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7