前言
大家好,关于数据挖掘或者机器学习的理论我想大家应该都已经了解很多,而数据挖掘的工具例如Pandas、NumPy、Sklearn等在历史文章都有所介绍,因此今天我们将开始第二个案例实战也是使用非常多的IRIS数据集:根据花瓣和花萼的长宽预测鸢尾花的种类。
加载数据
首先我们打开Jupyter Notebook
导入相关库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from pandas.plotting import scatter_matrix
接下来就是加载数据集,虽然在Sklearn库中内置了IRIS数据集,但是在这我使用处理好的数据
可以看到我们一共有150条数据,每条数据的前四列对应是花萼长度,花萼宽度,花瓣长度,花瓣宽度,最后一列就是花的种类,现在我们就需要通过这4个特征预测鸢尾花卉属于(iris-setosa/iris-versicolor/iris-virginica)中的哪一品种。
探索性分析
本节对数据集进行一些探索性分析,首先查看每一类的情况
可以看到我们的数据很完整,一共150条数据每类50条,再查看数据的描述统计
接着我们通过箱线图与直方图来观察数据的最值,中位数和偏差与数据分布
进一步,我们可以绘散点图来观察四个变量之间的关联
可以看到有些变量之前有着明显的相关性,因此我们可以进行预测
建模分类
现在开始建模分类,和之前的例子一样,我们将数据集划分为训练集和测试集。因为我们的数据集只有150条记录,所以将使用120条记录来训练模型,剩下的30条记录用来评估模型
代码语言:javascript复制array = data.values
X = array[:,0:4]
Y = array[:,4]
x_train, x_test, y_train, y_test = model_selection.train_test_split(X, Y, test_size=0.2, random_state=7)
用于分类的模型很多,本文将使用以下四种经典算法来建模并进行评估:
- K近邻(KNN)
- 支持向量机(SVM)
- 随机森林(RF)
- 逻辑回归(LR)
关于这几种算法的理论并不会在本文详细展开,事实上可以通过百度轻松查到每一种算法的推导与应用,你应该了解后再往下进行。
OK,现在我们直接来实现,在Python中实现并不困难,以KNN为例,仅需4行代码即可完成训练模型和评估
代码语言:javascript复制model = KNeighborsClassifier()
model.fit(x_train,y_train)
predictions = model.predict(x_test)
print(accuracy_score(y_test, predictions))
其他三种算法的实现过程也是类似的,最后我们来看来四种算法的正确率
从结果可以看到,KNN的效果最好为90%,而基于决策树的随机森林表现较差为83.3%,当然由于随机性每次的结果可能不同,感兴趣的读者可以多试几次。