前言
分类是机器学习中的一个重要概念,涉及将新观察分配到预定义的类别中,如邮件分类或疾病诊断。常见的分类算法包括朴素贝叶斯、决策树和逻辑回归等。分类分析用于预测和模式识别,如信用评级、欺诈检测和医学诊断,并通过特征选择和模型评估指标(如AUC、准确率、召回率和F1得分)来优化性能。
分类分析是什么?
在机器学习和统计中,分类是基于包含其类别成员资格已知的观察(或实例)的训练数据集来识别新观察所属的一组类别(子群体)中的哪一个的问题。例如,将给定的电子邮件分配给“垃圾邮件”或“非垃圾邮件”类;根据观察到的患者特征(性别,血压,某些症状的存在或不存在等)为给定患者分配诊断。分类是模式识别的一个例子。
在机器学习的术语中,分类被认为是监督学习的一个实例,即学习可以获得正确识别的观察的训练集的情况。相应的无监督程序称为聚类,并涉及基于固有相似性或距离的某种度量将数据分组。
通常,将各个观察结果分析为一组可量化的属性,不同地称为解释变量或特征。这些属性可以不同地分类(例如,对于血型:“A”,“B”,“AB”或“O”),序数(例如“大”,“中”或“小”),整数值(例如,电子邮件中特定单词的出现次数)或实际值(例如,血压的测量值)。
实现分类的算法,特别是在具体实现中,被称为分类器。术语“分类器”有时也指由分类算法实现的数学函数,其将输入数据映射到类别。
跨领域的术语是多种多样的。在统计中,通常使用逻辑回归或类似程序进行分类,观察的属性称为解释变量(或独立变量,回归量等),要预测的类别称为结果,被认为是是因变量的可能值。在机器学习中,观察通常被称为实例,解释变量被称为特征(被分组为特征向量),并且要预测的可能类别是类。其他领域可能使用不同的术语。例如,在社区生态学中,术语“分类”通常是指聚类分析,即一种无监督学习,而不是本文中描述的监督学习。
一,分类的依据
1.基于数据的属性
以数字形式表示,具有明确的大小关系。例如年龄、收入、身高、体重等。可以根据数值的范围进行分类,不同的范围对应不同的类别; |
以年龄为例,可以分为儿童(0 - 12 岁)、青少年(13 - 19 岁)、成年人(20 - 59 岁)、老年人(60 岁及以上)等类别。每个年龄段的人群在消费行为、健康需求、兴趣爱好等方面可能存在显著差异; |
收入也可以根据不同的区间进行分类,如低收入、中等收入、高收入等。不同收入水平的消费者在购买能力、消费偏好和理财观念等方面有所不同; |
分类型属性的值是离散的,没有明确的大小关系。常见的分类型属性包括性别(男、女)、颜色(红、黄、蓝等)、地区(华北、华东、华南等)、职业(教师、医生、工程师等)等; |
对于地区属性,可以根据地理位置进行分类,不同地区的经济发展水平、文化背景、消费习惯等可能存在较大差异。例如,华东地区经济较为发达,消费者对高端产品的需求可能相对较高;而西部地区经济发展相对滞后,消费者可能更注重产品的性价比; |
职业属性也可以作为分类依据,不同职业的人群在收入水平、工作压力、消费需求等方面各不相同。例如,医生可能对医疗保健产品有较高的需求,而工程师可能对科技产品更感兴趣; |
2.基于业务的需求
客户分类:
①在市场营销中,客户分类是非常重要的。可以根据客户的购买行为、消费金额、购买频率、忠诚度等因素将客户分为不同的类别;
②高价值客户通常是那些消费金额高、购买频率高、忠诚度高的客户。企业可以针对这些客户提供个性化的服务和优惠政策,以提高客户满意度和忠诚度;
③中等价值客户可能消费金额和购买频率适中,企业可以通过促销活动等方式提高他们的购买频率和消费金额;
④低价值客户则是那些消费金额低、购买频率低的客户,企业可以通过市场调研了解他们的需求,改进产品和服务,以吸引他们成为更有价值的客户;
产品分类:
①根据产品的销售情况、利润贡献、市场需求、生命周期等因素将产品分为不同的类别;
②畅销产品通常是那些市场需求大、销售情况好、利润贡献高的产品。企业可以加大对这些产品的生产和推广力度,提高市场占有率;
③滞销产品则是销售情况不佳、库存积压的产品。企业可以通过促销活动、降价处理等方式尽快清理库存,减少损失;
④潜力产品是那些具有市场潜力但目前销售情况一般的产品。企业可以加大对这些产品的研发和市场推广力度,使其成为畅销产品;
二、分类的方法
常用分类算法:朴素贝叶斯、逻辑回归、决策树、随机森林、支持向量机等。
1.决策树
原理:
①决策树是一种基于树形结构的分类方法。它通过对数据进行一系列的判断和分支,构建一个树形结构,每个节点代表一个属性的判断条件,叶子节点代表最终的分类结果;
②决策树的构建过程通常采用贪心算法,从根节点开始,选择一个最优的属性进行分裂,使得分裂后的子节点尽可能纯,即属于同一类别的数据尽可能多。然后,对每个子节点重复这个过程,直到所有的数据都被分类到叶子节点为止;
举例:
在信用评估中,可以根据客户的年龄、收入、职业、信用记录等属性构建决策树。
首先,选择一个最优的属性作为根节点,例如收入;
然后,根据收入的高低将客户分为两个子节点,高收入客户和低收入客户;
接着,对每个子节点选择下一个最优的属性进行分裂,例如高收入客户中,如果职业为稳定职业(如公务员、教师、医生等),则信用风险较低;如果职业为不稳定职业(如自由职业者、个体工商户等),则信用风险较高。通过不断地分裂,最终构建出一个决策树,每个叶子节点代表一个信用风险等级。
优缺点分析:
优点 | 缺点 |
易于理解和解释:决策树的结构直观,易于理解和解释,可以帮助用户快速了解数据的分类规则 | 容易过拟合:决策树容易对训练数据过度拟合,导致在测试数据上的性能下降。为了避免过拟合,可以采用剪枝技术,对决策树进行简化 |
处理缺失值和异常值:决策树可以处理缺失值和异常值,对数据的质量要求相对较低 | 不稳定:决策树的构建过程对数据的微小变化比较敏感,不同的数据集可能构建出不同的决策树 |
可扩展性强:决策树可以很容易地扩展到多分类问题和回归问题 |
代码示例:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 导入评估指标模块
from sklearn.metrics import accuracy_score, auc, confusion_matrix, f1_score, precision_score, recall_score, roc_curve
# 导入表格库
import prettytable
# 导入dot插件库
import pydotplus
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 数据导入
df = pd.read_csv('xxx.csv', usecols=['Na','Ca','Type'])
v# 为了决策树图示简洁我们尽量减少分类,和特征值
dfs = df[df.Type < 3]
# 获取特征值
X = dfs[dfs.columns[:-1]].values
# 获取标签值
y = dfs['Type'].values - 1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2018)
#### 模型训练 ####
# 决策树模型
dt_model = DecisionTreeClassifier(random_state=2018)
# 训练模型
dt_model.fit(X_train, y_train)
# 对测试集做预测
pre_y = dt_model.predict(X_test)
####模型评估####
confusion_m = confusion_matrix(y_test, pre_y)
df_confusion_m = pd.DataFrame(confusion_m, columns=['0', '1'], index=['0', '1'])
df_confusion_m.index.name = 'Real'
df_confusion_m.columns.name = 'Predict'
df_confusion_m
# 获取决策树的预测概率
y_score = dt_model.predict_proba(X_test)
# ROC
fpr, tpr, thresholds = roc_curve(y_test, y_score[:, [1]])
# AUC
auc_s = auc(fpr, tpr)
# 准确率
accuracy_s = accuracy_score(y_test, pre_y)
# 精准度
precision_s = precision_score(y_test, pre_y)
# 召回率
recall_s = recall_score(y_test, pre_y)
# F1得分
f1_s = f1_score(y_test, pre_y)
# 评估数据制表
df_metrics = pd.DataFrame([[auc_s, accuracy_s, precision_s, recall_s, f1_s]], columns=['auc', 'accuracy', 'precision', 'recall', 'f1'], index=['结果'])
df_metrics
#### 可视化ROC#####
plt.figure(figsize=(8, 7))
plt.plot(fpr, tpr, label='ROC') # 画出ROC曲线
plt.plot([0, 1], [0, 1], linestyle='--', color='k', label='random chance')
# 画出随机状态下的准确率线
plt.title('ROC') # 子网格标题
plt.xlabel('false positive rate') # X轴标题
plt.ylabel('true positive rate') # y轴标题
plt.legend(loc=0)
plt.savefig('x.png')
2.支持向量机
原理:
①朴素贝叶斯分类器是一种基于贝叶斯定理的分类方法。它假设各个特征之间相互独立,即一个特征的出现与其他特征的出现无关。然后,根据贝叶斯定理计算每个类别的概率,选择概率最大的类别作为最终的分类结果;
②贝叶斯定理:P (A|B) = P (B|A) * P (A) / P (B),其中 P (A|B) 表示在事件 B 发生的条件下事件 A 发生的概率,P (B|A) 表示在事件 A 发生的条件下事件 B 发生的概率,P (A) 和 P (B) 分别表示事件 A 和事件 B 发生的概率;
举例:
在垃圾邮件分类中,可以将邮件中的关键词作为特征,将邮件分为垃圾邮件和正常邮件两个类别。首先,统计训练数据中每个关键词在垃圾邮件和正常邮件中出现的频率,计算每个关键词属于垃圾邮件和正常邮件的概率。然后,对于一封新的邮件,根据邮件中的关键词出现的频率,计算这封邮件属于垃圾邮件和正常邮件的概率,选择概率较大的类别作为最终的分类结果。
优缺点分析:
优点 | 缺点 |
算法简单:朴素贝叶斯分类器的算法简单,计算速度快,适用于大规模数据的分类 | 假设条件严格:朴素贝叶斯分类器假设各个特征之间相互独立,这个假设在实际应用中往往不成立,可能会影响分类的准确性 |
对小规模数据效果好:在小规模数据上,朴素贝叶斯分类器的性能通常比较好,可以快速得到分类结果 | 对输入数据的表达形式敏感:朴素贝叶斯分类器对输入数据的表达形式比较敏感,不同的表达形式可能会导致不同的分类结果 |
对缺失值不敏感:朴素贝叶斯分类器对缺失值不敏感,可以处理含有缺失值的数据 |
3.朴素贝叶斯
原理:
①支持向量机是一种基于统计学习理论的分类方法。它通过寻找一个超平面,将不同类别的数据尽可能地分开,使得分类间隔最大化;
②对于线性可分的情况,可以直接找到一个超平面将数据分开。对于线性不可分的情况,可以通过核函数将数据映射到高维空间,使得数据在高维空间中线性可分;
举例:
在图像识别中,可以将图像中的像素值作为特征,将图像分为不同的类别,如猫、狗、鸟等。首先,将图像中的像素值转换为特征向量,然后使用支持向量机进行分类。支持向量机可以找到一个最优的超平面,将不同类别的图像尽可能地分开。
优缺点分析:
优点 | 缺点 |
泛化能力强:支持向量机在小样本数据上具有很强的泛化能力,可以有效地避免过拟合 | 计算复杂度高:支持向量机的计算复杂度较高,特别是在处理大规模数据时,计算时间和空间开销较大 |
对高维数据效果好:支持向量机可以通过核函数将高维数据映射到低维空间进行分类,对高维数据的处理效果较好 | 核函数选择困难:支持向量机的性能很大程度上取决于核函数的选择,而核函数的选择目前还没有一个统一的标准,需要根据具体问题进行选择 |
鲁棒性好:支持向量机对噪声和异常值不敏感,具有较好的鲁棒性 |
三、应用场景
1.医疗领域
疾病诊断:
①根据患者的症状、检查结果、病史等数据,对疾病进行分类诊断。例如,通过分析患者的血液检查指标、心电图、影像学检查等数据,可以判断患者是否患有心脏病、糖尿病、癌症等疾病;
②分类分析可以帮助医生快速准确地做出诊断,制定个性化的治疗方案,提高治疗效果;
医疗风险评估:
①对患者的健康状况进行评估,预测患者发生疾病或并发症的风险。例如,通过分析患者的年龄、性别、家族病史、生活方式等因素,可以预测患者患心脏病、中风、糖尿病等疾病的风险;
②医疗风险评估可以帮助医生提前采取预防措施,降低患者的发病风险,提高医疗质量;
2.金融领域
信用评估:
①对个人或企业的信用状况进行评估,判断其信用风险等级。例如,通过分析个人的收入、资产、负债、信用记录等数据,可以判断个人的信用风险等级,为银行、信用卡公司等金融机构提供决策依据;
②信用评估可以帮助金融机构降低信用风险,提高贷款审批效率,促进金融市场的稳定发展;
欺诈检测:
①通过分析交易数据,识别出可能的欺诈行为。例如,通过分析信用卡交易数据,可以识别出异常的交易行为,如大额交易、频繁交易、异地交易等,判断是否为欺诈行为;
②欺诈检测可以帮助金融机构及时发现和防范欺诈行为,保护客户的资金安全,维护金融市场的秩序;
3.电商领域
客户细分:
①根据客户的购买行为、浏览记录、人口统计学信息等数据,将客户分为不同的细分群体。例如,根据客户的购买频率、购买金额、购买品类等因素,可以将客户分为高价值客户、中等价值客户、低价值客户等不同类别;
②客户细分可以帮助电商企业了解客户需求,制定个性化的营销策略,提高客户满意度和忠诚度;
商品推荐:
①根据客户的历史购买记录和浏览行为,为客户推荐可能感兴趣的商品。例如,通过分析客户的购买历史和浏览记录,可以发现客户的兴趣爱好和购买偏好,为客户推荐相关的商品;
②商品推荐可以提高客户的购买转化率,增加电商企业的销售额和利润;
4.交通领域
交通流量预测:
①根据历史交通流量数据、天气情况、节假日等因素,对未来的交通流量进行预测。例如,通过分析历史交通流量数据,可以发现交通流量的变化规律,结合天气情况、节假日等因素,预测未来的交通流量;
②交通流量预测可以帮助交通管理部门制定合理的交通管制措施,优化交通信号控制,提高交通效率;
交通事故分析:
①根据交通事故数据,分析交通事故的发生原因、影响因素等。例如,通过分析交通事故的发生地点、时间、车辆类型、驾驶员行为等因素,可以找出交通事故的高发区域、高发时段、高危车辆类型和高危驾驶员行为,为交通安全管理提供决策依据;
②交通事故分析可以帮助交通管理部门采取针对性的措施,降低交通事故的发生率,保障人民生命财产安全;
四、小结
大数据的分类分析在各个领域都有着广泛的应用,可以帮助我们更好地理解和处理数据,发现数据中的规律和模式,为决策提供支持。随着大数据技术的不断发展,分类分析的方法和应用场景也将不断拓展和深化。