分类、聚类模型

本文深入探讨了分类和聚类模型,包括逻辑回归、Fisher线性判别分析、K-means及其改进的K-means++算法,以及系统层次聚类。逻辑回归用于二值分类,Fisher线性判别分析用于线性判别,K-means聚类算法通过迭代寻找数据的最佳分组。文章还介绍了如何判断K值的合适性,如肘部法则,并提到了DBSCAN密度聚类算法,适合处理任意形状的簇和异常数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、分类模型

(1)逻辑回归

直接使用原来的回归模型进行回归,这时的因变量y只能取0或者是1,这回存在内生性问题,这会造成估计出的回归系数不一致并且有偏:

对于一个线性回归方程:
在这里插入图片描述
在概率论与数理统计中,对于二值的事件存在一个两点分布(伯努利分布),映射到0-1的二值问题,同样可以将他们结合:
在这里插入图片描述
这里的F称作连接函数,它将解释变量X和被解释变量Y连接在一起,同样的考虑到二值分布和0-1因变量的取值限制,在数理统计中,两点分布的期望计算方式是:
两点分布的期望 = 1 * P(事件1的发生概率)+ 0 * P(事件0的发生概率 = 事件1的发生概率

通过两点分布的期望计算方式我们可以讲预测值y 理解为 y=1的发生概率。

所以对于连接函数我们只需要保证连接函数F是一个定义在[0,1]上的函数,即保证F函数的值域是在[0,1]上。

通过上述的分析连接函数可以有两种取法:一种是probit回归,另外一种是logistic回归。
在这里插入图片描述
对于上述两种回归,后者logsitic回归更为常用,所以后面仅记录logsitic的计算。

那么逻辑回归是如何求解的?
对于非线性模型,使用的是极大似然估计(MLE)进行估计:
在这里插入图片描述

那么如何应用于分类?
在这里插入图片描述
我们计算出的的预测值就是事件1发生的概率(参考一下概率论中两点分布的思维~),那么我们可以以0.5作为一个分界线,若事件1的计算值超过0.5,即事件1的发生概率超过0.5,那么我们认为这件事情发生了,若小于0.5我们认为这件事没有发生,就是事件2发生了。

(2)举个逻辑回归的例子–水果分类

在这里插入图片描述
预测成功率,我们将0看作是橙子,将1看作是苹果。
在这里插入图片描述
逻辑回归系数表,就是回归方程前的系数。
在这里插入图片描述
如果使用逻辑回归出的结果很差怎么办?
可以在logistic回归模型中添加平方项、交互项等,但是这回出现一个过拟合的问题,虽然使得回归模型能够以较高的准确率预测样本数据,但是对于新数据并不能很好的预测。

假设我们对上面的例子添加平方向后:、
在这里插入图片描述
我们添加平方项后,预测的准确率达到了100%,模型对于样本数据的预测非常好,但是对于样本外的数据预测效果可能会很差。结论就是添加高次或者是交互项后,虽然预测的能力提高了但是容易发生过拟合现象,这又再一次提醒在回归里不能随意的添加高次、交互项等,每一步操作必须有理有据。

那如何选择和确定合适的模型?
交叉验证:把数据分为训练组和测试组,使用训练组的数据来估计出模型,然后在使用测试组的数据进行测试,最终选择合适的模型。

那么对于上面的例子:
在这里插入图片描述
(为消除数据偶然性的影响,可以对上述步骤多重复几次,最终对每个模型求一个平均的准确率,这个步骤或者说这个思想称为交叉验证)

### 聚类分类的主要区别 #### 定义区分 聚类是一种无监督学习技术,旨在发现数据中的自然分组或簇。这些簇内的对象彼此相似度较高,而与其他簇的对象相异较大[^1]。相反,分类属于有监督的学习过程,通过已知类别标签的数据训练模型来预测新观测值所属的具体类别[^2]。 #### 数据需求对比 在执行聚类分析时,并不需要预先给定任何关于输入实例应归属于哪个群体的信息;而在构建分类器之前,则通常需要一组带有明确标记(即目标变量)的历史记录作为训练素材[^3]。 #### 应用场景举例说明 - **聚类应用** 对客户行为模式进行探索性研究,识别不同类型的消费者群体以便实施精准营销策略。 - **分类应用场景** 利用历史交易记录判断信用卡申请者是否存在潜在欺诈风险,从而决定是否批准授信请求。 ```python from sklearn.cluster import KMeans from sklearn.datasets import make_classification import matplotlib.pyplot as plt # 创建模拟数据用于展示两类算法的不同之处 X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=4) plt.scatter(X[:, 0], X[:, 1]) plt.title('原始未标注数据') plt.show() # 使用K均值聚类算法处理上述数据集 kmeans = KMeans(n_clusters=2).fit(X) labels = kmeans.labels_ plt.scatter(X[:, 0], X[:, 1], c=labels) plt.title('经由K-means获得的两个簇') plt.show() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值