引言
机器学习中的分类算法是一种监督学习算法,其目的是根据已知的输入和输出(即特征和标签)来训练模型,以便能够预测未标记数据的类别标签
文章目录
一、分类算法
以下是一些常用的分类算法:
1.1 逻辑回归(Logistic Regression)
- 尽管名字中有“回归”,但逻辑回归是一种用于分类的算法,通常用于二分类问题。它通过使用逻辑函数(如sigmoid函数)将线性回归的输出映射到0和1之间,从而预测概率
1.2 支持向量机(Support Vector Machine, SVM)
- SVM是一种有效的二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器,间隔最大使它能够很好地泛化到未见数据
1.3 决策树(Decision Tree)
- 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一个类标签。决策树学习使用属性值来递归地将训练数据集分割成越来越小的子集
1.4 随机森林(Random Forest)
- 随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数决定的。随机森林在训练过程中引入了随机性,从而提高了模型的泛化能力和准确性
1.5 朴素贝叶斯(Naive Bayes)
- 朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,它首先基于特征的概率独立假设学习输入与输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y
1.6 K最近邻(K-Nearest Neighbors, KNN)
- KNN算法的工作原理是:在特征空间中,如果一个新样本与它最近的K个训练样本中的大多数属于同一个类别,那么这个新样本也属于这个类别
1.7 神经网络(Neural Networks)
- 神经网络是一种模仿人脑神经元连接方式的计算模型,通常用于深度学习中。多层感知器(MLP)是一种常见的神经网络结构,特别适用于分类问题
1.8 梯度提升决策树(Gradient Boosting Decision Tree, GBDT)
- GBDT是一种强大的机器学习算法,它通过迭代地训练决策树来最小化损失函数,通常用于各种分类和回归问题
1.9 集成方法(Ensemble Methods)
- 集成方法是通过结合多个基分类器的预测来提高分类性能的技术。除了随机森林和GBDT,还有AdaBoost、XGBoost等算法
每种算法都有其优缺点,适用于不同类型的数据集和问题。选择哪种算法通常取决于数据的特点、问题的复杂度、训练时间、预测准确性等因素。
二、使用逻辑回归进行分类
2.1 导入numpy和matplotlib库
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from lab_utils_common import dlc, plot_data
from plt_one_addpt_onclick import plt_one_addpt_onclick
plt.style.use('./deeplearning.mplstyle')
2.2 分类问题
分类问题的例子包括:将电子邮件识别为垃圾邮件或非垃圾邮件,或者判断肿瘤是恶性的还是良性的。特别是,这些是二元分类的例子,其中只有两种可能的结果。结果可以用’阳性’/‘阴性’这样的成对描述,比如’是’/‘否’,‘真’/‘假’或者’1’/‘0’。
分类数据集的绘图通常使用符号来表示一个示例的输出。在下面的图中,'X’用来表示阳性值,而’O’代表阴性结果。
x_train = np.array([0., 1, 2, 3, 4, 5])
y_train = np.array([0, 0, 0, 1, 1, 1])
X_train2 = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])
y_train2 = np.array([0, 0, 0, 1, 1, 1])
pos = y_train == 1
neg = y_train == 0
fig,ax = plt.subplots(1,2,figsize=(8,3))
#绘图1,单个变量
ax[0].scatter(x_train[pos], y_train[pos], marker='x', s=80, c = 'red', label="y=1")
ax[0].scatter(x_train[neg], y_train[neg], marker='o', s=100, label="y=0", facecolors='none',
edgecolors=dlc["dlblue"],lw=3)
ax[0].set_ylim(-0.08,1.1)
ax[0].set_ylabel('y', fontsize=12)
ax[0].set_xlabel('x', fontsize=12)
ax[0].set_title('one variable plot')
ax[0].legend()
#绘图2,两个变量
plot_data(X_train2, y_train2, ax[1])
ax[1].axis([0, 4, 0, 4])
ax[1].set_ylabel('$x_1$', fontsize=12)
ax[1].set_xlabel('$x_0$', fontsize=12)
ax[1].set_title('two variable plot')
ax[1].legend()
plt.tight_layout()
plt.show()
输出结果:
注意在上述图表中:
- 在单个变量图中,阳性结果用红色的’X’表示,y=1。阴性结果用蓝色的’O’表示,位于y=0
– 回想在线性回归的情况下,y不会仅限于两个值,但可以是任何值 - 在两个变量的图中,y轴不可用。阳性结果用红色的’X’表示,而阴性结果使用蓝色的’O’符号
– 回想在线性回归涉及多个变量时,y不会仅限于两个值,类似的图将是三维的
2.3 线性回归方法
之前应用线性回归来构建预测模型。现在我们来尝试使用这个方法来处理一个简单的例子,正如讲座中所描述的。该模型将基于肿瘤大小来预测肿瘤是良性还是恶性的,尝试以下操作:
- 点击’运行线性回归’来找到给定数据的最佳线性回归模型
– 注意结果的线性模型并不很好地匹配数据。改进结果的一个选项是应用一个阈值 - 勾选’切换0.5阈值’的复选框以显示如果应用阈值时的预测
– 这些预测看起来不错,预测与数据匹配 - 重要提示:现在,在远右侧(接近10的大肿瘤大小范围内)添加更多的’恶性’数据点,并重新运行线性回归
– 现在,模型预测了大肿瘤,但x=3处的数据点被错误预测了 - 要清除/刷新绘图,请重新运行包含绘图命令的单元格
w_in = np.zeros((1))
b_in = 0
plt.close('all')
addpt = plt_one_addpt_onclick( x_train,y_train, w_in, b_in, logistic=False)
输出结果:
上面的例子表明,线性模型不足以对分类数据进行建模
2.4 总结
- 探索了分类数据集和绘图
- 确定线性回归不足以进行逻辑回归