iris数据库(iris数据库做决策树)
简介:
Iris数据库是一个经典的机器学习数据库,因为其独特的三个不同类别的鸢尾花(setosa,versicolor和virginica)成为了经典的机器学习案例之一。Iris数据库是由维吉尼亚大学的机器学习数据的迈克尔-芬纳斯(Michael Fisher)在1986年创建的。该数据库旨在帮助研究人员研究各种机器学习算法,如聚类,分类和数据可视化。
多级标题:
一、 Iris数据库的数据结构
二、 如何使用Iris数据库?
三、 Iris数据库的数据可视化
四、 数据预处理
五、 模型训练和测试
六、 总结
内容详细说明:
一、 Iris数据库的数据结构
Iris数据库包含150个数据点,每个数据点包含四个特征:萼片长度,萼片宽度,花瓣长度和花瓣宽度,以及一个标签:不同种类鸢尾花的名称。其中50个数据点表示三个不同的鸢尾花类别,每个类别的数据点数相等,呈现了很好的均衡性。
二、 如何使用Iris数据库?
Iris数据库在机器学习研究和实践中经常被使用。为使用Iris数据库,首先需要从网络中下载数据集。下载完成后,可以使用Python中的pandas库来读取和操作数据。这首先需要将数据集导入pandas DataFram对象:
import pandas as pd
import numpy as np
col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
data = pd.read_csv(path, header=None, names=col_names)
此时pandas DataFram对象中已经有数据了,可以进行数据探索和进一步的分析,比如观察每个类别的特性:
# 得到三个类别的统计数据
data.groupby(['class']).agg(['mean', 'std'])
可以得到每个类别的平均值和标准差的统计数据。
三、 Iris数据库的数据可视化
Iris数据库的四个特征都是连续变量,可以用密度曲线表示它们的分布,折线图表示不同标签的数据点如何分布以及散点图表示不同特征之间的关系。
import seaborn as sns
# 密度曲线
sns.kdeplot(data.loc[data['class'] == 'Iris-setosa', 'sepal_length'], color='b', shade=True, Label='setosa')
sns.kdeplot(data.loc[data['class'] == 'Iris-versicolor', 'sepal_length'], color='r', shade=True, Label='versicolor')
sns.kdeplot(data.loc[data['class'] == 'Iris-virginica', 'sepal_length'], color='g', shade=True, Label='virginica')
# 折线图
sns.lineplot(data=data, x='sepal_length', y='petal_length', hue='class')
# 散点图
sns.scatterplot(data=data, x='petal_length', y='petal_width', hue='class')
四、 数据预处理
在机器学习中,将数据转换为可供模型使用的格式是非常重要的。在Iris数据库中,类别标签是字符串,模型无法使用字符串直接进行训练。我们需要将标签转换为数值格式才可以被模型使用,常用的方法包括One-hot编码和标签编码:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# Label编码
le = LabelEncoder()
data_le = data.copy(deep=True)
data_le['class'] = le.fit_transform(data_le['class'])
# One-hot编码
ohe = OneHotEncoder()
data_ohe = data.copy(deep=True)
data_ohe = pd.get_dummies(data_ohe, columns=['class'])
五、 模型训练和测试
在Iris数据库中最流行的算法是K近邻和决策树。这里我们将K近邻算法和样本划分为训练集和测试集块进行模型的训练和测试:
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
X = data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
y = data['class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# K近邻算法
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print('Accuracy: ', accuracy_score(y_test, y_pred))
六、 总结
Iris数据库是一个经典的机器学习数据库,对于初学者来说,可以帮助他们了解数据分布,数据预处理和基本的模型训练和测试方法。对于高级研究者来说,可以使用大量的特征工程,数据增强和不同的模型结构,来提高模型的表现和性能。