通过sklearn机器学习库来实现传统分类算法的案例解析
通过sklearn机器学习库来实现传统分类算法的案例解析
本文将通过一个经典的鸢尾花数据集,使用sklearn机器学习库实现多种传统分类算法,包括K近邻、朴素贝叶斯、决策树、逻辑回归和支持向量机。通过这个案例,读者可以深入了解这些算法的实现过程和效果评估。
分类算法是机器学习中的一类监督学习方法,其目的是根据已知的输入数据和它们对应的标签(类别),训练出一个模型,这个模型能够对未知数据进行分类。以下是一些常见的分类算法:
逻辑回归(Logistic Regression)
逻辑回归是一种广泛使用的分类算法,尽管它的名字中有“回归”,但它实际上用于分类问题。它通过使用逻辑函数(如sigmoid函数)将线性回归的输出映射到0和1之间,从而预测概率。决策树(Decision Trees)
决策树通过一系列的测试来对数据进行分类。每个测试涉及数据的一个属性,并且有一个或多个分支对应于测试的每个可能结果。决策树易于理解,但容易过拟合。随机森林(Random Forests)
随机森林是一个集成算法,它通过组合多个决策树来提高分类的准确率。每棵树都是在数据的不同子集上训练的,并且通过投票或平均预测来合并每棵树的预测结果。支持向量机(Support Vector Machines, SVM)
SVM是一种强大的分类器,它通过找到最优的分割超平面来将不同类别的数据分开。SVM试图最大化类别之间的间隔,使其对噪声和异常值具有鲁棒性。朴素贝叶斯(Naive Bayes)
朴素贝叶斯基于贝叶斯定理,假设特征之间相互独立。它简单高效,特别是在处理文本分类问题时非常有效。K-最近邻(K-Nearest Neighbors, KNN)
KNN是一种基于实例的学习方法,它通过查找与新数据点最接近的k个训练样本,并根据这些邻居的标签来进行分类。神经网络(Neural Networks)
神经网络是一系列相互连接的节点(或“神经元”),它们模拟人脑的处理方式。多层感知器(MLP)是一种常见的神经网络结构,用于分类任务,也属于深度学习范畴。梯度提升机(Gradient Boosting Machines, GBM)
梯度提升是一种强大的集成学习技术,它通过逐步构建模型来最小化损失函数,通常使用决策树作为基础模型。
接下来,我们将使用一个经典的鸢尾花数据集,通过sklearn机器学习库来实现传统分类算法。
一:数据预处理
Step1:数据背景介绍
此数据分析的目的是基于鸢尾花的属性数据,如两种鸢尾花萼片、花瓣的长度和宽度平均值,从而建立一个分类模型对根据这些属性数据鸢尾花种类进行分类。原始数据包括两种鸢尾花,每种有 50 个样本,以及每个样本的一些属性,包括萼片的长度和宽度、花瓣的长度和宽度。
每列的含义如下:
- Id:样本的ID。
- SepalLengthCm:萼片的长度(单位为厘米)。
- SepalWidthCm:萼片的宽度(单位为厘米)。
- PetalLengthCm:花瓣的长度(单位为厘米)。
- PetalWidthCm:花瓣的宽度(单位为厘米)。
- Species:鸢尾花种类。
Step2:属性相关性和分布分析
import seaborn as sns
import pandas as pd
sns.pairplot(data = df, hue = "Species")
从四个属性中的分布得知萼片长度和萼片宽度重合度较高,所以我们可以考虑删除这两行来简化分类问题:
# 为了简化问题,删除对分类作用不大的SepalLengthCm和SepalWidthCm数据
data = df.drop(["SepalLengthCm","SepalWidthCm"], axis=1)
data
Step3: 构建训练集和测试集
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data["Species"] = encoder.fit_transform(data["Species"])
data
这段代码可以将"Species"列转为利于训练分类模型的数字编码:
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(data, test_size = 0.2)
data_x_train = train_set[["PetalLengthCm","PetalWidthCm"]]
data_y_train = train_set["Species"]
data_x_test = test_set[["PetalLengthCm","PetalWidthCm"]]
data_y_test = test_set["Species"]
随后我们调用sklearn库,随机分割以形成原始数据20%为测试集,80%为训练集,以“species”列作为分类标签。接下来便可建立分类模型。
二:传统分类算法实现
1:K近邻算法
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier()
clf.fit(data_x_train, data_y_train)
res = clf.predict(data_x_test)
print(res)
print(data_y_test.values)
accuracy = clf.score(data_x_test, data_y_test)
print("K近邻算法预测正确率为:{:.0%}".format(accuracy))
K近邻实现可分为以下步骤:构建分类器对象-训练模型-预测。可以得到如下结果:
第一列为模型对测试集标签的预测结果,第二列为测试集的原本标签,可以看到预测效果正确率达到了100%。
2:朴素贝叶斯算法
同理可以进行相似的朴素贝叶斯算法的实现:
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(data_x_train, data_y_train)
res = clf.predict(data_x_test)
print(res)
print(data_y_test.values)
accuracy = clf.score(data_x_test, data_y_test)
print("朴素贝叶斯算法预测正确率为:{:.0%}".format(accuracy))
3:决策树算法
同理可以进行相似的决策树算法的实现:
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(data_x_train, data_y_train)
res = clf.predict(data_x_test)
print(res)
print(data_y_test.values)
accuracy = clf.score(data_x_test, data_y_test)
print("决策树算法预测正确率为:{:.0%}".format(accuracy))
4:逻辑回归算法
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(solver='saga', max_iter=1000)
clf.fit(data_x_train, data_y_train)
res = clf.predict(data_x_test)
print(res)
print(data_y_test.values)
accuracy = clf.score(data_x_test, data_y_test)
print("逻辑回归算法预测正确率为:{:.0%}".format(accuracy))
5:支持向量机算法
from sklearn.svm import SVC
clf = SVC()
clf.fit(data_x_train, data_y_train)
res = clf.predict(data_x_test)
print(res)
print(data_y_test.values)
accuracy = clf.score(data_x_test, data_y_test)
print("支持向量机算法预测正确率为:{:.0%}".format(accuracy))
以上就是通过sklearn机器学习库来实现传统分类算法,比如K近邻算法,朴素贝叶斯算法,决策树算法,逻辑回归算法,支持向量机算法的实例。这里只针对简单的数据集,如果有更复杂的数据需要用到更精细的特征工程和最新的高效的分类算法。需要进一步学习的可以参考另一篇博客。