Python-sklearn-特征工程
Sklearn 特征工程包含sklearn.feature_extraction特征提取、sklearn.feature_selection特征选择和sklearn.calibration概率校准。 文本特征提取1.CountVectorizer— 词频向量化 ⭐fromsklearn.feature_extraction.textimportCountVectorizer vectorizerCountVectorizer(inputcontent,# content,filename,fileencodingutf-8,decode_errorstrict,# strict,ignore,replacestrip_accentsNone,# ascii,unicode,NonelowercaseTrue,# 全部转为小写preprocessorNone,# 自定义预处理函数tokenizerNone,# 自定义分词函数stop_wordsNone,# english, list, Nonetoken_patternr(?u)\b\w\w\b,# 正则表达式ngram_range(1,1),# (min_n, max_n)analyzerword,# word,char,char_wbmax_df1.0,# 文档频率上限过滤高频词min_df1,# 文档频率下限过滤低频词max_featuresNone,# 最大词汇量vocabularyNone,# 预定义词汇表binaryFalse,# True出现/不出现非计数dtypenp.int64)Xvectorizer.fit_transform(documents)# 关键属性print(vectorizer.vocabulary_)# 词→索引映射print(vectorizer.get_feature_names_out())# 特征名print(vectorizer.stop_words_)# 被去除的停用词print(vectorizer.fixed_vocabulary_)# 是否使用预定义词汇表# 查看词频term_freqsX.sum(axis0)# 每个词的总出现次数2.TfidfVectorizer— TF-IDF 向量化 ⭐使用频率最高的文本向量化方法。fromsklearn.feature_extraction.textimportTfidfVectorizer vectorizerTfidfVectorizer(inputcontent,encodingutf-8,lowercaseTrue,stop_wordsenglish,ngram_range(1,2),# uni-grams bi-gramsmax_df0.8,# 过滤出现在 80% 以上文档的词min_df2,# 过滤出现少于 2 次的词max_features5000,norml2,# 归一化: l1,l2,Noneuse_idfTrue,# 是否使用 IDFsmooth_idfTrue,# 平滑 IDF防止除以 0sublinear_tfFalse,# 使用 1log(tf)binaryFalse,vocabularyNone)Xvectorizer.fit_transform(documents)# 关键属性print(vectorizer.idf_)# IDF 向量print(vectorizer.vocabulary_)print(vectorizer.fixed_vocabulary_)3.TfidfTransformer— TF-IDF 变换器将词频矩阵转换为 TF-IDF 矩阵。fromsklearn.feature_extraction.textimportTfidfTransformer transformerTfidfTransformer(norml2,use_idfTrue,smooth_idfTrue,sublinear_tfFalse)X_tfidftransformer.fit_transform(X_counts)print(transformer.idf_)CountVectorizer TfidfTransformer TfidfVectorizer上面更简洁4.HashingVectorizer— 哈希向量化使用特征哈希Hashing Trick无词汇表、内存高效。fromsklearn.feature_extraction.textimportHashingVectorizer vectorizerHashingVectorizer(n_features2**20,# 哈希特征维度inputcontent,encodingutf-8,lowercaseTrue,stop_wordsenglish,ngram_range(1,2),analyzerword,norml2,alternate_signTrue,# 使用符号哈希binaryFalse,dtypenp.float64)Xvectorizer.fit_transform(documents)# 注意: 无 vocabulary_ 属性不可逆️ 图像特征提取fromsklearn.feature_extraction.imageimport(extract_patches_2d,# 提取 2D 图像块reconstruct_from_patches_2d,# 从块重建图像PatchExtractor,# 块提取器grid_to_graph,# 像素网格图img_to_graph,# 图像到图)fromsklearn.feature_extraction.imageimportextract_patches_2dimportnumpyasnp imagenp.arange(16).reshape(4,4)# 提取所有 (2, 2) 的图像块patchesextract_patches_2d(image,patch_size(2,2),max_patchesNone,# None所有, int随机采样random_state42)# patches.shape: (9, 2, 2) 对于 4x4 图像# 从块重建图像reconstructedreconstruct_from_patches_2d(patches,image_size(4,4))️ 特征选择1. 过滤法Filter MethodsVarianceThreshold— 方差阈值fromsklearn.feature_selectionimportVarianceThreshold selectorVarianceThreshold(threshold0.0)# 移除方差为 0 的特征X_selectedselector.fit_transform(X)print(selector.variances_)# 每个特征的方差print(selector.get_support())# 布尔掩码SelectKBest— 选最佳 K 个特征 ⭐fromsklearn.feature_selectionimportSelectKBest,f_classif,chi2,mutual_info_classif# 分类: f_classif(F 检验), chi2(卡方), mutual_info_classif(互信息)selectorSelectKBest(score_funcf_classif,# 评分函数k10# 保留的特征数)X_selectedselector.fit_transform(X,y)print(selector.scores_)# 每个特征的得分print(selector.pvalues_)# 每个特征的 p 值部分函数print(selector.get_support())# 被选中的特征# 回归对应的评分函数fromsklearn.feature_selectionimportf_regression,mutual_info_regression selector_regSelectKBest(score_funcf_regression,k10)常用评分函数:分类回归说明f_classiff_regressionF 检验chi2—卡方检验仅非负值mutual_info_classifmutual_info_regression互信息捕获非线性—r_regressionPearson 相关系数SelectPercentile— 按百分比选择fromsklearn.feature_selectionimportSelectPercentile selectorSelectPercentile(score_funcf_classif,percentile50# 保留前 50% 的特征)X_selectedselector.fit_transform(X,y)SelectFpr/SelectFdr/SelectFwe— 基于假设检验fromsklearn.feature_selectionimportSelectFpr,SelectFdr,SelectFwe# 控制假阳性率selectorSelectFpr(score_funcf_classif,alpha0.05)# 控制错误发现率selectorSelectFdr(score_funcf_classif,alpha0.05)# 按家族错误率选择selectorSelectFwe(score_funcf_classif,alpha0.05)2. 包装法Wrapper MethodsRFE— 递归特征消除 ⭐fromsklearn.feature_selectionimportRFEfromsklearn.linear_modelimportLogisticRegression estimatorLogisticRegression(max_iter1000)selectorRFE(estimatorestimator,n_features_to_select10,# 或 float (0~1) 表示比例step1,# 每次移除的特征数verbose0,importance_getterauto# auto,coef_,feature_importances_)selector.fit(X,y)print(selector.support_)# 被选中特征的掩码print(selector.ranking_)# 特征的排名1最优print(selector.n_features_)# 选中特征数print(selector.estimator_)# 训练好的最终估计器# 变换X_selectedselector.transform(X)RFECV— 带交叉验证的 RFE ⭐fromsklearn.feature_selectionimportRFECVfromsklearn.svmimportSVC estimatorSVC(kernellinear)selectorRFECV(estimatorestimator,step1,min_features_to_select1,cv5,# 或 StratifiedKFold 等scoringaccuracy,verbose0,n_jobs-1,importance_getterauto)selector.fit(X,y)print(selector.support_)print(selector.ranking_)print(selector.n_features_)# 最优特征数print(selector.cv_results_)# 各特征数的交叉验证结果print(selector.grid_scores_)# 已弃用使用 cv_results_# 可视化importmatplotlib.pyplotasplt n_featuresrange(selector.min_features_to_select,len(selector.cv_results_[mean_test_score])1)plt.figure(figsize(10,6))plt.errorbar(n_features,selector.cv_results_[mean_test_score],yerrselector.cv_results_[std_test_score])plt.xlabel(Number of features)plt.ylabel(Cross-validation score)plt.title(RFECV: Optimal Number of Features)plt.axvline(selector.n_features_,colorr,linestyle--,labelfOptimal:{selector.n_features_})plt.legend()plt.show()SequentialFeatureSelector— 顺序特征选择fromsklearn.feature_selectionimportSequentialFeatureSelector selectorSequentialFeatureSelector(estimatorLogisticRegression(max_iter1000),n_features_to_select10,# 或 auto用 tol 判断tolNone,# 分数改善低于 tol 则停止directionforward,# forward(前向) 或 backward(后向)scoringaccuracy,cv5,n_jobs-1)selector.fit(X,y)print(selector.support_)print(selector.get_support())X_selectedselector.transform(X)3. 嵌入法Embedded MethodsSelectFromModel⭐使用任何有coef_或feature_importances_属性的估计器选择特征。fromsklearn.feature_selectionimportSelectFromModelfromsklearn.linear_modelimportLassoCVfromsklearn.ensembleimportRandomForestClassifier# 方式一: L1 正则化LassolassoLassoCV(cv5,random_state42).fit(X,y)selectorSelectFromModel(estimatorlasso,thresholdmedian,# 或 mean, 1.25*mean, floatprefitTrue,# True已拟合, False先 fitnorm_order1,# 系数范数max_featuresNone# 最大特征数)X_selectedselector.transform(X)# 方式二: 树模型特征重要性rfRandomForestClassifier(n_estimators100,random_state42)selectorSelectFromModel(estimatorrf,threshold0.5*mean,# 阈值为平均重要性的 0.5 倍prefitFalse)X_selectedselector.fit_transform(X,y)# 属性print(selector.estimator_)# 训练好的估计器print(selector.threshold_)# 使用的阈值print(selector.get_support())# 选中的特征print(selector.max_features_)# 最大特征数 特征字典提取DictVectorizer将字典列表转换为特征矩阵自动 One-Hot 编码类别值。fromsklearn.feature_extractionimportDictVectorizer data[{city:Beijing,temp:25},{city:Shanghai,temp:28,humidity:70},{city:Beijing,temp:22,humidity:55}]vecDictVectorizer(dtypenp.float64,separator,sparseTrue)Xvec.fit_transform(data)# temp cityBeijing cityShanghai humidity# 0 25.0 1.0 0.0 0.0# 1 28.0 0.0 1.0 70.0# 2 22.0 1.0 0.0 55.0print(vec.feature_names_)print(vec.vocabulary_)# 逆变换data_reconstructedvec.inverse_transform(X) 特征特征Feature CharacterizerFeatureHasher— 特征哈希fromsklearn.feature_extractionimportFeatureHasher hasherFeatureHasher(n_features2**10,# 输出特征维度input_typedict,# dict,pair,stringdtypenp.float64,alternate_signTrue)Xhasher.fit_transform(feature_dicts)# 无 vocabulary_ — 不可逆 概率校准CalibratedClassifierCV— 概率校准 ⭐让模型的概率估计更准确。fromsklearn.calibrationimportCalibratedClassifierCVfromsklearn.svmimportSVC# 方法一: 包裹任意分类器base_modelSVC(probabilityFalse)# 不一定要开启概率calibratedCalibratedClassifierCV(estimatorbase_model,methodsigmoid,# sigmoid(Platt Scaling) 或 isotoniccv5,# prefit 或 int 或 cross-validatorn_jobsNone,ensembleTrue# True每个 fold 一个模型集成False单模型)calibrated.fit(X_train,y_train)y_probcalibrated.predict_proba(X_test)y_predcalibrated.predict(X_test)# 关键属性print(calibrated.calibrated_classifiers_)# 校准后的分类器列表print(calibrated.classes_)Platt Scaling vs Isotonic Regression:method适用场景数据量sigmoid默认更稳定较少数据也可isotonic更灵活非参数需要更多数据1000calibration_curve()— 校准曲线fromsklearn.calibrationimportcalibration_curveimportmatplotlib.pyplotasplt prob_true,prob_predcalibration_curve(y_true,y_prob,n_bins10,strategyuniform# uniform 或 quantile)# 绘制plt.plot([0,1],[0,1],k--,labelPerfectly calibrated)plt.plot(prob_pred,prob_true,s-,labelModel)plt.xlabel(Mean predicted probability)plt.ylabel(Fraction of positives)plt.legend()plt.show() 完整特征工程 Pipeline 模板fromsklearn.pipelineimportPipelinefromsklearn.composeimportColumnTransformerfromsklearn.preprocessingimportStandardScaler,OneHotEncoderfromsklearn.imputeimportSimpleImputerfromsklearn.feature_selectionimportSelectFromModelfromsklearn.ensembleimportRandomForestClassifier# 1. 预处理preprocessorColumnTransformer([(num,StandardScaler(),numerical_cols),(cat,OneHotEncoder(handle_unknownignore),categorical_cols),])# 2. 特征选择feature_selectorSelectFromModel(RandomForestClassifier(n_estimators100,random_state42),thresholdmedian)# 3. 最终模型final_modelRandomForestClassifier(n_estimators200,random_state42)# 完整管道pipelinePipeline([(preprocessor,preprocessor),(feature_selection,feature_selector),(classifier,final_model)])pipeline.fit(X_train,y_train)print(fTest accuracy:{pipeline.score(X_test,y_test):.3f})print(fSelected features:{pipeline.named_steps[feature_selection].get_support().sum()})[[sklearn-总览|← 返回总览]]

相关新闻

影石ACE Pro 2人像直出参数:4K60帧肤色通透拍摄方案

影石ACE Pro 2人像直出参数:4K60帧肤色通透拍摄方案

这次我们来看一个针对影石ACE Pro 2运动相机的专业人像拍摄参数设置方案。这套参数的核心目标,是在4K 60帧的高规格下,通过精细调整视角、曝光、白平衡和滤镜,实现肤色自然、画质通透、氛围感强的人像视频直出效果。对于需要快速出片、减少后…

2026/8/11 13:18:08 阅读更多 →
网络安全人才缺口解析与破解之道

网络安全人才缺口解析与破解之道

1. 行业现状与矛盾现象解析 网络安全领域存在一个令人费解的现象:一方面各类安全事件频发,数据泄露、系统入侵等事故几乎每周都能登上科技媒体头条;另一方面企业却普遍反映难以招聘到合格的网络安全人才。这种供需失衡的状态已经持续了至少五…

2026/8/10 10:18:33 阅读更多 →
深度解读中国建设企业协会网站首页功能与核心价值指引

深度解读中国建设企业协会网站首页功能与核心价值指引

在这个快节奏、信息化高度发达的时代,对于一个行业组织而言,网站不再仅仅是一个展示形象的橱窗,而是连接会员、传达政策、服务行业以及凝聚共识的核心枢纽。当我们谈论“中国建设企业协会”这样一个庞大而复杂的行业管理机构时,它的每一个字节、每一张图片、每一行文字都承…

2026/8/10 10:18:33 阅读更多 →

最新新闻

Windows 10 + VS2017 离线编译 OpenCV 4.5.2 全流程详解

Windows 10 + VS2017 离线编译 OpenCV 4.5.2 全流程详解

1. 项目概述与核心价值最近在帮几个刚入行计算机视觉的朋友配置开发环境,发现一个挺普遍的问题:很多教程要么版本太老,要么步骤跳跃太大,特别是对于网络环境受限、无法顺畅访问某些资源站点的朋友来说,照着做很容易卡在…

2026/8/11 13:18:00 阅读更多 →
基于Trae框架的像素画解析:JS+Python全栈图像处理实践

基于Trae框架的像素画解析:JS+Python全栈图像处理实践

1. 项目概述:从像素画到结构化数据的挑战 最近在做一个挺有意思的玩意儿,核心目标是把一张像素画图片,自动解析成一份结构化的数据,比如每个色块的位置、颜色值,甚至能识别出一些简单的图形轮廓。这听起来像是图像处理…

2026/8/11 13:18:00 阅读更多 →
AI 写论文哪个软件最好?深度科普宏智树 AI 毕业论文全链路实用功能

AI 写论文哪个软件最好?深度科普宏智树 AI 毕业论文全链路实用功能

作为长期深耕论文写作领域的教育测评博主,每年毕业季、课程论文节点,后台高频收到读者提问:AI 写论文哪个软件最好?市面上 AI 写作工具琳琅满目,通用大模型文字松散、学术逻辑断层,小众论文工具功能割裂&am…

2026/8/11 13:18:00 阅读更多 →
5分钟掌握抖音内容采集:高效批量下载与管理全攻略

5分钟掌握抖音内容采集:高效批量下载与管理全攻略

5分钟掌握抖音内容采集:高效批量下载与管理全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …

2026/8/11 13:18:00 阅读更多 →
C#与Halcon拖拽式视觉开发框架实战

C#与Halcon拖拽式视觉开发框架实战

1. 项目概述:C#与Halcon的拖拽式开发框架 这个框架的核心理念是让视觉开发变得像搭积木一样简单。我见过太多团队在Halcon开发上陷入困境——要么是算法工程师写的代码难以维护,要么是C#工程师对视觉算子一知半解。这个框架通过拖拽式设计解决了这个痛点…

2026/8/11 13:17:59 阅读更多 →
做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做了5年社区公益项目负责人|项目汇报终于不只剩“做了几场活动”

做社区公益项目的人,应该都经历过这种阶段性汇报:会议开始前,手上已经有活动场次、参与人数、志愿者工时、物资数量、照片、报名表和居民反馈,但真正打开PPT时,还是不知道先讲哪个成果。白天要和社区确认场地&#xff…

2026/8/11 13:16:59 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →