《机器学习Python实战》课件 17-项目8 项目拓展-SVM实现收入分类预测-图文版_第1页
《机器学习Python实战》课件 17-项目8 项目拓展-SVM实现收入分类预测-图文版_第2页
《机器学习Python实战》课件 17-项目8 项目拓展-SVM实现收入分类预测-图文版_第3页
《机器学习Python实战》课件 17-项目8 项目拓展-SVM实现收入分类预测-图文版_第4页
《机器学习Python实战》课件 17-项目8 项目拓展-SVM实现收入分类预测-图文版_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器学习Python实战

项目8项目拓展——SVM实现收入分类预测目录CONTENTS01任务导入5万美元阈值·算法可审计·让帮扶更精准02任务目标会特征数值化·会建模预测·会评估归因03相关知识任务背景·模型演进·成人收入数据集·独热编码04任务实施读取→数值化→取特征→划分建模→预测评估05结果分析与总结准确率解读·误分类归因·项目小结与延伸项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测任务导入从一份1994年的人口普查数据,到今天的「算法公平」命题数据·真实来源成人收入(Adult)数据集取自1994年美国人口普查资料,共32561条真实居民记录、14项个人特征。它是机器学习界研究「收入预测」与「算法公平性」最经典的公开基准。现实·人工审核的困境银行、HR、政府部门长期依赖简单规则判断收入能力,例如「学历≥本科且周工时>40小时」。规则难以捕捉高维非线性关系,公平性也难以量化。核心问题:给定个人特征,判断其年收入是否超过5万美元?14项个人特征年龄·学历·职业工作类型·周工时…SVM+RBF核二分类模型income=1年收入>5万美元income=0年收入≤5万美元技术向善算法要「说得清、审得了」——收入预测不是给人贴标签,而是让帮扶更精准、让资源配置更公平。SVM用少量支持向量刻画决策边界,比动辄数千条规则的模型更容易解释与审计,这正是技术服务民生的底气。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测任务目标围绕「成人收入二分类」,锤炼三项核心能力01会特征数值化读取adult.data数据集;把income标签映射为0/1;用get_dummies()将8个类别型特征做独热编码,转为模型可计算的数值特征。02会建模预测按8∶2划分训练集与测试集,用StandardScaler标准化;以SVC(kernel='rbf',C=1,gamma=0.01)训练二分类模型并预测测试集。03会评估归因用accuracy_score与classification_report量化模型效果;能从高维稀疏、噪声异常、参数未调优三方面分析误分类原因。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测相关知识①·任务背景与目标为什么用SVM来做收入分类?——从人工规则到自动学习对比维度传统人工审核SVM二分类模型判别依据✘简单规则:学历≥本科且工时>40h✔从数据中自动学习复杂决策边界特征关系✘只能线性叠加,忽略特征交互✔核技巧映射高维,捕捉非线性关系公平性✘凭经验裁量,难以量化✔指标可量化、结果可复现、可审计落地形态✘依赖人工经验,难以规模化✔可复用的「收入能力」评分引擎分类阈值:5万美元>5万美元→1≤5万美元→0落地场景银行信贷评估HR薪酬定级政府精准帮扶项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测相关知识②·收入预测模型演进三代技术路线:可解释→高精度→兼顾精度与可审计1逻辑回归早期信用评分做法:把年龄、教育年限等连续变量线性加权。✔模型简单、可解释性强✘无法刻画「非线性交互」:高学历+低年龄与低学历+高年龄对收入的影响并非简单叠加2XGBoost/LightGBM集成树时代做法:自动组合特征,显著提升AUC值。✔精度高、特征工程负担小✘产生数千条节点分裂规则,难以通过监管审计3SVM+RBF核本任务方案做法:用核技巧把原始稀疏特征映射到高维空间。✔少量支持向量即可表达复杂边界,模型稀疏易审计✔RBF核局部敏感,对异常点鲁棒,适用服从长尾分布的收入数据▸选择SVM不是因为它「最准」,而是因为它在精度、稀疏性与可解释性之间给出了适合监管场景的平衡。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测相关知识③·认识成人收入数据集adult.data:32561条记录,14项特征+1个收入标签32561条样本15列字段6数值型特征8类别型特征2个收入类别数值型特征(6项,可直接参与计算)age年龄fnlwgt抽样权重education-num受教育年限capital-gain资本收益capital-loss资本损失hours-per-week周工作时长类别型特征(8项,必须先数值化)workclass工作类型education教育水平marital-status婚姻状态occupation职业relationship家庭角色race族裔sex性别native-country原籍国目标标签income原始取值为文本“>50K”/“<=50K”>50K→1≤50K→0项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测相关知识④·独热编码get_dummies()一列文本→若干列0/1:类别特征数值化的标准做法编码示意:以workclass(工作类型)为例workclassState-govPrivateSelf-emp_Private_Self-emp_State-gov001100010为什么不直接编号0/1/2…?文本类别之间没有大小关系,直接编号会引入虚假的顺序信息。独热编码为每个取值单独开一列,用0/1表示「是否属于该类」,避免误导模型。⚠代价:维度急剧膨胀14列原始特征展开为108维稀疏特征——绝大多数取值为0。高维稀疏正是后面产生误分类的原因之一。8个类别特征展开后的列数workclass9education16marital-status7occupation15relationship6race5sex2native-country42类别列小计102+数值列6=108维项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测任务实施·总览五步跑通SVM收入分类:每一步都对照运行结果图确认输出1读取数据集pd.read_csvadult.data2标签与特征数值化apply+get_dummies3获取特征向量.values(32561,108)4划分标准化建模train_test_splitStandardScaler+SVC5预测与评估predictclassification_report一条主线原始文本数据→独热编码后的108维数值特征→标准化并按8∶2划分→SVC(RBF核)训练→准确率与分类报告量化评估。数据处理占了前三步,这正是真实项目的常态。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测步骤1·读取成人收入数据集adult.data无表头,需用names参数手动指定15个列名关键代码importpandasaspd#1.本地读取文件file_path="adult.data"columns=['age','workclass','fnlwgt','education','education-num','marital-status','occupation','relationship','race','sex','capital-gain','capital-loss','hours-per-week','native-country','income']data=pd.read_csv(file_path,names=columns,sep=r',\s*',engine='python')#2.输出display_columns=[colforcolindata.columnsifcol!='race']print('成人收入数据集形状:',data.shape)print('读取前10条数据:')print(data[display_columns].head(10))图8-16查看数据集前10条数据预期输出·成人收入数据集形状:(32561,15)·打印前10条记录,含age、workclass、education、occupation等列·可见大量类别型特征以文字形式存储▸文字特征无法直接计算,须先数值化读码要点:sep=r',\s*'用正则同时吃掉逗号与其后空格;engine='python'才支持正则分隔符;display_columns剔除race列仅为打印美观,不影响后续建模。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测步骤2·标签与类别特征数值化income映射为0/1;类别型特征用get_dummies()独热编码关键代码#目标标签数值化:>50K记为1,<=50K记为0data['income']=data['income'].apply(lambdax:1if'>50K'inxelse0)#类别型特征数值化(独热编码)data_X=pd.get_dummies(data.drop('income',axis=1))y=data['income'].valuesprint('前5条数据:')data_X.head()两处转换,一次完成①标签income">50K"→1"≤50K"→0apply()逐行判断字符串中是否含“>50K”②8个类别型特征文本列→多列0/114列→108列drop('income')先剔除标签列,避免标签泄漏图8-17数值化后的前5条数据预期输出·data_X前5行全部为数值·原workclass等列被拆成workclass_Private等0/1列·y为一维数组,取值只有0和1▸标签与特征分离,可以取特征向量了项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测步骤3·获取特征向量与类别标签把DataFrame转成NumPy数组,确认建模输入的形状关键代码#获取特征向量X=data_X.valuesprint('特征形状:{}标签形状:{}'.format(X.shape,y.shape))维度对照:编码前vs编码后编码前·原始特征14列编码后·建模特征108维X特征矩阵(32561,108)y类别标签(32561,)样本数一致(32561),说明特征与标签已正确对齐。图8-18特征向量与标签的形状预期输出·特征形状:(32561,108)·标签形状:(32561,)·108=6个数值列+102个独热列▸高维稀疏矩阵,SVM训练耗时会明显增加项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测步骤4·划分数据集、标准化与建模8∶2拆分→StandardScaler标准化→SVC(RBF核)训练关键代码fromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_score,classification_report#拆分数据集,得到训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=125)#特征标准化scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)#建立SVM分类模型(RBF核)clf=SVC(kernel='rbf',C=1,gamma=0.01)clf.fit(X_train_scaled,y_train)关键参数配置kernel='rbf'用RBF核映射高维,拟合非线性边界C=1正则化强度,控制对误分类的惩罚gamma=0.01核系数,取值小→决策边界更平滑train_size=0.880%训练、20%测试random_state=125固定随机种子,结果可复现数据集划分:26048∶6513=80%∶20%训练集26048条(80%)测试6513注意:scaler只在训练集上fit,测试集仅transform,防止数据泄漏。项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测步骤5·模型预测与评估输出准确率与分类报告,逐类别看模型表现关键代码#模型预测y_pred=clf.predict(X_test_scaled)#模型评估print('模型准确率:{:.2f}'.format(accuracy_score(y_test,y_pred)))print('\n分类报告:\n',classification_report(y_test,y_pred))分类报告(测试集6513条)类别precisionrecallf1-scoresupport0≤50K0.880.930.9049871>50K0.730.570.641526accuracy——0.856513读表:类别0(低收入)f1=0.90表现好;类别1(高收入)recall仅0.57,漏判较多。图8-19模型准确率和分类报告预期输出·模型准确率:0.85·分类报告含precision/recall/f1-score/support·macroavg0.80/0.75/0.77·weightedavg0.84/0.85/0.84▸SVM能较准确地预测收入是否超过5万美元项目8支持向量机算法实战·8.3项目拓展——SVM实现收入分类预测结果分析0.85的准确率意味着什么?误分类又从何而来0.85模型准确率6513条测试样本中约5536条判断正确两个类别表现差异明显(f1-score)类别0≤50K0.904987条·76.6%类别1>50K0.641526条·23.4%类别不平衡是主因之一高收入样本仅占23.4%,模型偏向多数类,导致高收入人群召回率只有0.57,实际应用中会漏掉部分真实高收入者。误分类的三大原因01高维稀疏将类别型特征

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论