分类算法是机器学习中的一类监督学习方法,其目的是根据已知的输入数据和它们对应的标签(类别),训练出一个模型,这个模型能够对未知数据进行分类。以下是一些常见的分类算法:
1. 逻辑回归(Logistic Regression)
逻辑回归是一种广泛使用的分类算法,尽管它的名字中有“回归”,但它实际上用于分类问题。它通过使用逻辑函数(如sigmoid函数)将线性回归的输出映射到0和1之间,从而预测概率。
2. 决策树(Decision Trees)
决策树通过一系列的测试来对数据进行分类。每个测试涉及数据的一个属性,并且有一个或多个分支对应于测试的每个可能结果。决策树易于理解,但容易过拟合。
3. 随机森林(Random Forests)
随机森林是一个集成算法,它通过组合多个决策树来提高分类的准确率。每棵树都是在数据的不同子集上训练的,并且通过投票或平均预测来合并每棵树的预测结果。
4. 支持向量机(Support Vector Machines, SVM)
SVM是一种强大的分类器,它通过找到最优的分割超平面来将不同类别的数据分开。SVM试图最大化类别之间的间隔,使其对噪声和异常值具有鲁棒性。
5. 朴素贝叶斯(Naive Bayes)
朴素贝叶斯基于贝叶斯定理,假设特征之间相互独立。它简单高效,特别是在处理文本分类问题时非常有效。
6. K-最近邻(K-Nearest Neighbors, KNN)
KNN是一种基于实例的学习方法,它通过查找与新数据点最接近的k个训练样本,并根据这些邻居的标签来进行分类。
7. 神经网络(Neural Networks)
神经网络是一系列相互连接的节点(或“神经元”),它们模拟人脑的处理方式。多层感知器(MLP)是一种常见的神经网络结构,用于分类任务,也属于深度学习范畴。
8. 梯度提升机(Gradient Boosting Machines, GBM)
梯度提升是一种强大的集成学习技术,它通过逐步构建模型来最小化损失函数,通常使用决策树作为基础模型。
接下来我将利用一个经典的可供学习研究的数据集,通过sklearn机器学习库来实现传统分类算法,比如K近邻算法,朴素贝叶斯算法,决策树算法,逻辑回归算法,支持向量机算法。
一:数据预处理
Step1:数据背景介绍
此数据分析的目的是基于鸢尾花的属性数据,如两种鸢尾花萼片、花瓣的长度和宽度平均值,从而建立一个分类模型对根据这些属性数据鸢尾花种类进行分类。
原始数据包括两种鸢尾花,每种有 50 个样本,以及每个样本的一些属性,包括萼片的长度和宽度、花瓣的长度和宽度。
每列的含义如下:
- Id:样本的ID。
- SepalLengthCm:萼片的长度(单位为厘米)。
- SepalWidthCm:萼片的宽度(单位为厘米)。
- PetalLengthCm:花瓣的长度(单位为厘米)。
- PetalWidthCm:花瓣的宽度(单位为厘米)。
- Species:鸢尾花种类。
数据下载和观看入口:数据集_机器学习 - 飞书云文档 (feishu.cn)
Step2:属性相关性和分布分析
import seaborn as sns
import pandas as pd
sns.pairplot(data = df, hue = "Species")
# sns.pairplot 是 seaborn 库中的一个函数,用于创建数据的成对关系图。这个函数会为数据集中的每一对数值变量绘制一个散点图,并且可以按照某个分类变量(通过 hue 参数指定)进行颜色编码。
#sns.pairplot:这是 seaborn 的函数,用于生成数据集中变量对的散点图网格,可以检测变量之间的相关性和边缘分布。
#data = df:data 参数指定了要绘制的数据集,这里 df 是一个 pandas DataFrame,包含了你的数据。
# hue = "Species":hue 参数用于指定一个分类变量,根据这个变量的不同类别,pairplot 会用不同的颜色绘制点。在这个例子中,如果数据集 df 中有一个名为 “Species” 的列,那么 pairplot 会根据 “Species” 列中的不同值来给散点图中的点着色。
得到如下结果:
从四个属性中的分布得知萼片长度和萼片宽度重合度较高,所以我们可以考虑删除这两行来简化分类问题:
# 为了简化问题,删除对分类作用不大的SepalLengthCm和SepalWidthCm数据
data = df.drop(["SepalLengthCm","SepalWidthCm"], axis=1)
data
得到如下结果:
Step3: 构建训练集和测试集
# 标签编码,比如将"Species"列中的Iris-setosa编码为0,Iris-versicolor编码为1
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)
# 20%的数据作为测试集,80%的数据作为训练集
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近邻算法
#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:朴素贝叶斯算法
同理可以进行相似的朴素贝叶斯算法的实现:
# 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:逻辑回归算法
# 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:支持向量机算法
# 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近邻算法,朴素贝叶斯算法,决策树算法,逻辑回归算法,支持向量机算法的实例。这里只针对简单的数据集,如果有更复杂的数据需要用到更精细的特征工程和最新的高效的分类算法。需要进一步学习的可以参考另一篇博客:
利用GBDT进行对表格类数据的机器学习的实战项目-CSDN博客
点下关注,分享更多有关AI,数据分析和量化金融的实用教程和实战项目。