机器学习笔记—第一个应用:鸢尾花数据集分类(1)—附完整代码
以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考。
首先我们将完成一个简单的机器学习应用——鸢尾花数据集分类,并构建第一个模型。与此同时,介绍一些核心概念和术语。
话不多说,我们首先来看一下,鸢尾花到底是何方神圣!
文章目录
1.明确问题
假设有一名植物学爱好者对她所发现的鸢尾花的品种很感兴趣。她收集了每多鸢尾花的一些测量数据。
花瓣 | |
---|---|
花瓣的长度 | 花瓣的宽度 |
花萼 | |
花萼的长度 | 花萼的宽度 |
PS:所有的测量结果的单位都是厘米
这些鸢尾花已经被植物学专家鉴定为属于setosa
,versicolor
,virginica
三个品种之一。
假设:
- 通过这些测量数据,她可以确定每朵鸢尾花所属的品种。
- 我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。
目标:
- 我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新的鸢尾花的品种。
分析:
- 因为我们已经有已知品种的鸢尾花的测量数据,所以这是一个监督学习的模型。
- 我们要在多个选项中预测其中一个鸢尾花品种,因此这是一个**分类(classification)**问题。
- 可能输出的鸢尾花的不同品种叫做类别(class)。
- 数据集中的每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。
- 单个数据点(一朵鸢尾花)的预期输出是这朵花的品种。
- 对于一个数据点来说,它的品种叫做标签(label)。
2.了解数据
2.1读取数据
首先我们将利用鸢尾花(Iris)数据集,这是机器学习和统计学中一个经典的数据集。它包含在scikit-learn
的datasets
模块中。我们可以调用load_iris
函数来加载数据:
In[1]:
from sklearn.datasets import load_iris #导入sklearn包的datass模块
iris_dataset=load_iris() #调用load_iris函数来读取数据
load_iris
返回的iris对象是一个Bunch
对象,与字典非常相似,里面包含了键和值:
In[2]:
print("Keys of iris_dataset:\n{}".format(iris_dataset.keys()))
Out[2]:
Keys of iris_dataset:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
2.2查看数据
可以看见有六个键,我们其实可以通过名字就能猜到每个键对应的值是什么。好比feature_names’
一看就知道是特点的名字,也就是特征呗。所以有时候不需要我们每一个键都运行查看一下。
接下来,既然是学习,那么还是让我们看一下每一个键分别存储了哪些值吧。
DESCR
键对应的值是数据集的简要说明,由于过多只给出开头部分。
In[3]:
print(iris_dataset['DESCR'][:193]+"\n...")
Out[3]:
.. _iris_dataset:
Iris plants dataset
--------------------
**Data Set Characteristics:**
:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, pre
...
target_names
键对应的值是一个字符串数组,里面包含我们要预测的花的品种:
In[4]:
print("Target names:", iris_dataset['target_names'])
Out[4]:
Target names: ['setosa' 'versicolor' 'virginica']
feature_names
键对应的值是一个字符串列表,对每一个特征进行了说明:
In[5]:
print("Feature names:\n", iris_dataset['feature_names'])
Out[5]:
Feature names:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
数据包含在target
和data
字段中。data
里面是花萼长度,花萼宽度,花瓣长度,花瓣宽度的测量数据,格式为NumPy
数组:
In[6]:
print("Type of data:", type(iris_dataset['data']))
Out[6]:
Type of data: <class 'numpy.ndarray'>
data
数组的每一行对应一朵花,列代表每朵花的四个测量数据:
In[7]:
print("Shape of data:", iris_dataset['data'].shape)
Out[7]:
Shape of data: (150, 4)
可以得出,数组中包含150朵不同的花的测量数据。
下面给出前5个样本的特征数值:
In[8]:
print("First five rows of data:\n", iris_dataset['data'][:5])
Out[8]:
First five rows of data:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7