特征工程
呆萌的代Ma
这个作者很懒,什么都没留下…
展开
-
python使用t-sne算法降维,方便可视化
常用的降维算法有LDA,PCA;但通常为了方便可视化,我们使用t-sne降维算法。PCA的算法可以参考:异常检测2——PCA异常检测t-san的算法可以参考:t-SNE算法示例代码import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set()def get_data(): """生成聚类数据""" from sklearn.datasets import make_blob原创 2022-04-13 22:35:18 · 2437 阅读 · 1 评论 -
异常检测3——AutoEncoder异常检测
整体的算法思路将正常样本与异常样本切分为:训练集X,训练集Y,测试集X,测试集YAutoEncoder建模:建模用正样本数据训练AutoEncoder:因为AutoEncoder是要想办法复现原有数据,因此要确保AutoEncoder看到的都只是自身正常的数据,这样当异常的数据到来时,就会出现很突兀的状况,这也是我们要的效果。计算阈值:这是很多研究讨论的点。因为异常样本会造成很突兀的效果,但是突兀的程度有多大,我们认为是异常样本,就是这里要明确的让样本通过Autoencoder模型,复现后的Lo原创 2022-03-25 16:33:53 · 6280 阅读 · 3 评论 -
异常检测2——PCA异常检测
文章目录算法思想PCA推导示例代码算法思想对原始数据标准化(均值0方差1)PCA有两种计算方法:最大投影方差与最小重构代价(可以查看下面的PCA推导)在异常检测中,使用的逻辑是:对训练集做特征值分解:特征向量代表方向,对应的特征值是空间中这个方向的方差,特征值越大,方差越大我们可以把特征向量所指的方向,看做正常样本点的方向(因为训练集中绝大多数是正常样本点),而计算出的特征值越大,意味着异常点在这个方向上与正常样本的差异越大所以接下来,我们只要把跟正常样本不是一路人的点找到就行,它们是异原创 2022-03-22 15:48:40 · 3371 阅读 · 0 评论 -
缺失值填充6——拉格朗日插值法填充序列缺失值
拉格朗日插值法的直观表述可以参考:https://www.zhihu.com/question/58333118拉格朗日插值法在python中可以直接使用:from scipy.interpolate import lagrangeimport numpy as npx = np.array([1, 2, 3, 4, 5])y = np.array([10, 8, 4, 6, 2, 10])lag_model = lagrange(x, y) # 根据x与y建模print(lag_mode原创 2022-03-10 22:59:14 · 2961 阅读 · 5 评论 -
特征编码2 - 无监督一维编码(序数编码、计数编码)及python示例
前情提要:特征编码1 - 特征编码概述与分类:https://blog.csdn.net/weixin_35757704/article/details/123050687无监督的含义是:特征编码时只根据自身的无监督输出1维按照本身的数据来进行编码,并且输出的结果是1维数据1. 序数编码 Ordinal Encoding/Label Encoder把同一个离散值用同一个整数表示from sklearn.preprocessing import LabelEncoderlabel_df = L原创 2022-02-22 21:48:43 · 1462 阅读 · 0 评论 -
特征编码1 - 特征编码概述与分类
对特征编码有助于:处理无法量化的数据便于得到更优模型以更细粒度的处理我们的数据博主在学习中觉得,特征编码既是一种优势,又是一种束缚优势在于:同样是年龄这个维度,如果是在研究奶粉的问题中,我们拆解问题的粒度需要到:0-1个月,1-3个月,3-6个月,6-12个月…,但是研究青少年焦虑的问题时,就需要另一种编码方法,因此手动进行编码可以构造更细粒度的特征。束缚在于:编码其实是构造特征的一种,因此编码会放大某个维度的粒度,其他即便很重要的特征也会被掩盖光芒。尤其当数据维度太大时(常见于推荐系统维原创 2022-02-21 17:03:33 · 1651 阅读 · 0 评论 -
调参1——随机森林贝叶斯调参
贝叶斯调参教程请参考:https://blog.csdn.net/weixin_35757704/article/details/118480135安装贝叶斯调参:pip install bayesian-optimization算法简介paper地址:http://papers.nips.cc/paper/4522-practical-bayesian%20-optimization-of-machine-learning-algorithms.pdfSnoek, Jasper, Hugo原创 2022-02-21 14:35:52 · 1697 阅读 · 2 评论 -
python多进程运行MIC(最大信息系数)
MIC是最大信息系数,可以参考:特征筛选10——MIC最大信息系数(有监督筛选):https://blog.csdn.net/weixin_35757704/article/details/121976825计算相对比较复杂,数据量大的话消耗的时间也较长,MIC计算可以参考的库有:minepy github地址:https://github.com/minepy/minepymictools github地址:https://github.com/minepy/mictools这里使用多进原创 2022-02-09 17:25:15 · 2152 阅读 · 0 评论 -
python 数据变化——n次多项式
PolynomialFeatures 文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html用于使用N次多项式生成数据示例代码import numpy as npimport pandas as pdfrom sklearn.preprocessing import PolynomialFeatures # 导入多项式回归模型def get_data原创 2022-01-04 19:15:57 · 525 阅读 · 0 评论 -
python借助missingno可视化分析缺失值
借助missingno来可视化缺失值missingno github项目主页:https://github.com/ResidentMario/missingno缺失值可视化的方法也很简单:missingno.matrix(dataframe)会返回AxesSubplot类型的图像,使用AxesSubplot.figure.show()就可以展示出来了示例代码import missingnoimport pandas as pdimport numpy as npdef get_da原创 2021-12-30 11:53:00 · 1437 阅读 · 0 评论 -
缺失值填充5——AutoEncoder填充序列缺失值
AutoEncoder可以参考:pytorch实现基本AutoEncoder与案例AutoEncoder填充缺失值的思路是:在完整的数据集上训练一个AutoEncoder把有缺失的数据拿过来,先全零填充原有的值,再通过AutoEncoder得到结果将得到的结果对应填充到原有的缺失数据上背后的理由是,数据压缩后已经很好的掌握了原有数据的一些规律,才能很好的复原。借助这种规律来反推出缺失值,这就是AutoEncoder的有效性的来源。示例代码import torchimport torch.原创 2021-12-29 12:02:12 · 1639 阅读 · 0 评论 -
python RandomTrees特征编码
算法简介通过构建随机森林,为变量进行编码:首先训练一个随机森林的模型按照决策树的分叉,每个叶节点都会占用一个位置,比如下图就共有4个叶节点,因此最大的编码长度是4如果这个特征A的值a,既可以匹配到第1个叶节点的位置,也可以到第3个叶节点的位置,那么这个值的编码就是[1,0,1,0]依次编码,得到结果RandomTreesEmbedding:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomTre原创 2021-12-22 17:46:50 · 750 阅读 · 0 评论 -
特征筛选11——ExtraTrees筛选特征
算法简述ExtraTrees(极度随机树),与随机森林(Random Forest)是一样的,都是决策树的集成模型,区别在于:分叉的方式随机森林依据Gini或信息熵ExtraTrees是随机,没错纯随机,随机的特征构建边,随机的阈值来分叉在筛选特征时也可以使用随机森林,但是在容易过拟合的情况下纯随机的ExtraTrees表现会更好,因为无形中表示:在随机的场景下(模拟未知分布的测试集)某些特征仍旧表示出强势的区分度,证明这个特征很重要示例代码import pandas as pddef原创 2021-12-22 16:42:27 · 2852 阅读 · 0 评论 -
异常检测1——python使用KNN模型进行异常检测
pyod github项目地址:https://github.com/yzhao062/pyodpyod 文档地址:https://pyod.readthedocs.io/en/latest/数据源:https://github.com/zrnsm/pyculiarity/blob/master/tests/raw_data.csv代码示例from pyod.models.knn import KNN # 使用KNN异常检测import pandas as pddef get_data()原创 2021-12-19 17:40:38 · 3226 阅读 · 3 评论 -
缺失值填充4——使用线性模型(岭回归、Lasso回归、ElasticNet回归)填充序列缺失值
原始的问题可能是:一个X(包含x1,x2,缺失x,x3…) =====预测=> y模型填充缺失值:使用:x1,x2,x3… y =====预测=> 缺失x算法思路Lasso回归:在线性回归结尾加入绝对值和的正则化方法(L1正则)岭回归:在线性回归结尾加入平方和的正则化方法(L2正则)ElasticNet回归:在线性回归结尾同时加入L1正则与L2正则示例代码import pandas as pdimport numpy as npdef get_dataset():原创 2021-12-19 15:38:35 · 1787 阅读 · 1 评论 -
缺失值填充3——使用随机森林模型填充序列缺失值
算法思路原始的问题可能是:一个X(包含x1,x2,缺失x,x3…) =====预测=> y模型填充缺失值:使用:x1,x2,x3… y =====预测=> 缺失x所以我们把缺失值作为预测任务的label,把原始的预测y作为特征的一部分,反向推出缺失值示例代码import pandas as pdimport numpy as npdef get_dataset(): """得到数据 :return data_x:有缺失值的数据 :return true_原创 2021-12-17 17:52:19 · 813 阅读 · 0 评论 -
缺失值填充2——python 热卡填充(Hot deck imputation)、冷卡填充(Cold deck imputation)
基本概念热卡填充:在完整数据中找到一个与它最相似的对象,用最相似的值填充当前值冷卡填充:通过其他途径找到能填充缺失部分的值示例代码import pandas as pdimport numpy as npdef hot_deck_imputation(dataframe: pd.DataFrame): from sklearn.impute import KNNImputer hot_deck_imputer = KNNImputer(n_neighbors=2, weigh原创 2021-12-17 17:44:17 · 9252 阅读 · 2 评论 -
缺失值填充1——缺失值查看、确定值填充、参考值填充
可以参考:https://blog.csdn.net/weixin_35757704/article/details/89280715查看缺失值可以通过下面的代码得到缺失值的数量:dataframe.isnull().sum()也可通过简单的 .info() 来看缺失值的情况;下面的代码可以得到 dataframe的缺失值占比情况:为0就表示没有缺失值dataframe.isnull().sum()/len(dataframe)缺失值在进行求和时,会被默认视为0确定值填充使用 0 填充原创 2021-12-17 17:41:28 · 1178 阅读 · 0 评论 -
不均衡数据集采样2——BorderlineSMOTE算法(过采样)
论文:Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learninghttps://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.308.9315&rep=rep1&type=pdfBorderline Smote 算法只过采样小样本数据的边界算法思路:从小样本出发,计算小样本点ppp的k近邻的全部样本,如果: 1> 全是其.原创 2021-12-17 12:00:25 · 4042 阅读 · 7 评论 -
特征筛选10——MIC最大信息系数(有监督筛选)
理论部分可以参考:https://blog.csdn.net/qq_27586341/article/details/90603140互信息也是通过衡量x与y的线性关系,来判断特征的重要性,整个算法的思路是:x与y构成二维平面对平面进行切分,将平面切块看每个块里x与y的数量关系,如果x与y的数量越接近,互信息越多示例代码import pandas as pddef load_data(): # 这个用来读取数据 from sklearn.datasets import mak原创 2021-12-17 09:52:00 · 937 阅读 · 0 评论 -
python pandas借助pandas-profiling自动生成EDA
安装方法:pip install pandas-profilinggithub地址:https://github.com/pandas-profiling/pandas-profiling示例代码import numpy as npimport pandas as pdfrom pandas_profiling import ProfileReport# pip install pandas-profilingdef load_data(): """用来生成训练、测试数据"""原创 2021-12-15 17:51:07 · 646 阅读 · 0 评论 -
特征筛选9——根据重要性SelectFromModel筛选特征(有监督筛选)
策略思想:使用能够进行特征重要性评估的模型(一般带有feature_importances或coef_参数)训练特征如果结果重要性的得分小于阈值,就会被认为是不重要的特征比如小于0.1*mean(重要性)示例代码import pandas as pddef load_data(): """用来生成训练、测试数据""" from sklearn.datasets import make_classification data_x, data_y = make_clas原创 2021-12-15 17:12:01 · 2904 阅读 · 0 评论 -
特征筛选8——递归特征删除(REF)筛选特征(有监督筛选)
Recursive feature elimination (RFE)是通过递归的删除一些特征,最终得到模型结果RFE思路如下:首先借助模型训练所有特征,得到各个特征的权重从权重最小的特征开始,删除特征后重新训练模型,得到除了被删特征外的权重直到所有权重都大于阈值或固定数量的特征数注意:模型需要能够评估特征重要性(sklearn中一般带有feature_importances或coef_参数)代码示例代码中包含RFE与加了交叉验证的RFECV:import pandas as pd原创 2021-12-15 14:26:07 · 2610 阅读 · 2 评论 -
不均衡数据集采样1——SMOTE算法(过采样)
SMOTE: Synthetic Minority Over-sampling Technique论文地址:https://www.jair.org/index.php/jair/article/download/10302/24590SMOTE的算法思路是:使用KNN的聚类方法,在附近(最少选附近5个点)随便找一个点,然后连线在线段上随便找一个点,就是新的样本点详细代码可以参考:https://zhuanlan.zhihu.com/p/44055312代码示例安装方法:pip in.原创 2021-12-14 17:27:04 · 1560 阅读 · 0 评论 -
python pandas处理无限值inf
如果不处理inf,可能导致报错:ValueError: Input contains NaN, infinity or a value too large for dtype('float64').示例代码首先构造inf,可以使用:np.inf,也可以使用float("inf"),其中inf指无穷大,-inf值无穷小import pandas as pdimport numpy as npdataframe = pd.DataFrame(data=[ [1, 2, np.inf],原创 2021-12-14 14:30:46 · 9163 阅读 · 0 评论 -
数据分箱6——分箱结果进行WOE转化
WOE的具体公式与含义请参考:特征筛选7——WOE(Weight of Evidence)/IV值(Information Value)筛选特征(有监督筛选)WOE转化可以将分箱的阈值覆盖原有的值,一般来讲并不会改变预测精度,但是可以为可解释性提供方便更深入的理解请参考:风控模型—WOE与IV指标的深入理解应用:https://zhuanlan.zhihu.com/p/80134853示例代码我们使用一个分箱的库:scorecardbundle来做分箱scorecardbundle gith原创 2021-12-14 11:57:53 · 3931 阅读 · 0 评论 -
特征筛选7——WOE(Weight of Evidence)/IV值(Information Value)筛选特征(有监督筛选)
使用这个特征需要:问题是分类问题(二分类)特征是离散的在二分类问题中,IV值用来衡量特征的重要性,即为了预测任务,这个特征能提供多少信息。当然,计算公式本身没有什么实际含义,重要的是比大小原理首先计算WOE,这个指标能够反映出当前特征的这个值能反映多少总体的信息其中:yiy_iyi:当前的离散值中,值为1的数量yTy_TyT:全部值为1的数量nin_ini:当前的离散值中:值为0的数量nTn_TnT:全部值为0的数量而IV值计算公式是:这个pyipy_ipyi与原创 2021-12-14 10:46:54 · 2209 阅读 · 0 评论 -
数据分箱5——Best-KS(Kolmogorov-Smirnov)分箱(有监督)
ks是Kolmogorov-Smirnov,优势、理论部分可以参考:https://blog.titanwolf.in/a?ID=00950-78d07928-af47-4f50-a4a0-dc975d0d74a2注意:y中只能取0和1,其中1为坏样本,0为好样本;示例代码代码来源:https://blog.csdn.net/yeshang_lady/article/details/112623604import pandas as pdimport numpy as npfrom sklear原创 2021-12-13 17:27:22 · 797 阅读 · 0 评论 -
数据分箱4——卡方最优分箱 ChiMerge算法使用(有监督)
论文地址:https://sci2s.ugr.es/keel/pdf/algorithm/congreso/1992-Kerber-ChimErge-AAAI92.pdfKerber, Randy. “Chimerge: Discretization of numeric attributes.” Proceedings of the tenth national conference on Artificial intelligence. 1992.ChiMerge算法详解(英文):https:/.原创 2021-12-13 14:11:03 · 1733 阅读 · 1 评论 -
数据分箱3——决策树分箱(有监督)
思路比较简单:将某一列数据作为训练集,将label作为结果,直接训练一个决策树,然后根据决策树的分裂节点的阈值作为分箱的依据。sklearn的决策树文档:https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html方法:def decision_tree_binning(x_value: np.ndarray, y_value: np.ndarray, max_bin=10) -&g原创 2021-12-13 10:18:32 · 4469 阅读 · 1 评论 -
数据分箱2——等频、等距分箱
需要给定一个数值范围,然后按照下面的规则自动分箱:等频分箱:每个区间内包括的值一样多等距分箱:每两区间之间的距离是一样的等频分箱使用:pd.qcut,更多可以参考文档:https://pandas.pydata.org/docs/reference/api/pandas.qcut.html等距分箱使用:pd.cut,更多可以参考文档:https://pandas.pydata.org/docs/reference/api/pandas.cut.html示例代码import pandas as原创 2021-12-12 16:45:13 · 9951 阅读 · 0 评论 -
数据分箱1——人工手动分箱
人工手动分箱,是指已经有了标准,比如:60分以下不合格,60-80合格,80+优秀可以使用pandas.cut进行分箱,更多用法可以参考官方文档:https://pandas.pydata.org/docs/reference/api/pandas.cut.html代码:import pandas as pdvalue_list = [10, 20, 30.4, 59, 61, 79, 80, 90, 99, 100]# 没有标签,只有区间的划分cut_bin = pd.cut(value_原创 2021-12-12 16:28:44 · 598 阅读 · 0 评论 -
特征筛选6——肯德尔相关系数筛选特征(单变量筛选)
肯德尔系数主要是用来判断两个有序序列的相关性大致的计算流程:对x与y先进行排序,得到不同的值对应的顺序x与y配对计算,判断他们的顺序的一致对 (x的顺序与y的顺序相同) 和分歧对 (x的顺序与y的顺序相反)最后根据这个顺序的统计结果计算得到肯德尔系数的结果注:我们可以看到,如果x或y序列中有大量的值重复,比如部分完全相同的x与y序列,这个就很难区分了。因此有基于这种思想的不同的计算方法(成为肯德尔系数的变种),在scipy.stats.kendalltau中参数variant='b'就是指定变原创 2021-12-12 14:41:06 · 878 阅读 · 0 评论 -
特征筛选5——距离相关系数筛选特征(单变量筛选)
距离相关系数用来判断两个变量是否独立,值域为[0,2]值接近0,两个变量正相关值接近1,两个变量无关值接近2,两个变量负相关距离相关系数可以参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.correlation.html维基百科解释:https://en.wikipedia.org/wiki/Distance_correlationpython中的使用也很简单:from scip原创 2021-12-12 13:34:16 · 2516 阅读 · 0 评论 -
特征筛选4——斯皮尔曼相关系数筛选特征(单变量筛选)
斯皮尔曼相关系数(斯皮尔曼等级相关系数)计算思路是:首先将值做排序判断排序的序号之间的相关系数更多详情请参考:https://zh.wikipedia.org/wiki/%E6%96%AF%E7%9A%AE%E5%B0%94%E6%9B%BC%E7%AD%89%E7%BA%A7%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0工具类:def spearmanr_selection(x_data, y_data): """斯皮尔曼相关系数""" from s原创 2021-10-26 16:41:35 · 1656 阅读 · 0 评论 -
特征筛选3——卡方检验筛选特征(单变量筛选)
sklearn文档:https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.chi2.html卡方检验只适用分类任务,用来检验特征与y是否相互独立,具体的描述可以参考:https://www.jianshu.com/p/b670b2a23187工具类是:def chi2_selection(x_data, y_data): # todo chi2 只能是分类方法 # https://scikit-原创 2021-10-26 16:26:49 · 798 阅读 · 0 评论 -
特征筛选2——皮尔逊相关系数筛选(单变量筛选)
值域为正负1之间,用来筛查单变量与预测结果之间的相关关系,一般来讲:绝对值在0-0.1之间:无关绝对值在0.1-0.3之间:弱相关关系绝对值在0.3-0.6之间:存在相关关系绝对值在0.6-0.9之间:强相关关系绝对值大于0.9:几乎线性相关主要的功能函数:def pearsonr_selection(x_data, y_data): # 皮尔逊pearsonr相关系数 from scipy.stats import pearsonr para_dict3 = []原创 2021-10-26 15:56:08 · 3811 阅读 · 0 评论 -
特征筛选1——根据方差筛选(单变量筛选)
根据给定方差的阈值,删除掉值变化小的维度,以此降低数据规模。当把阈值设置为0的时候,就会删除没有变化的数据。示例import numpy as npfrom sklearn.feature_selection import VarianceThresholddef drop_min_value(data): """根据方差去除变化小的特征""" sel = VarianceThreshold(threshold=0) # 方差阈值,去掉方差为0的数据,也就是去除一个值的数据原创 2021-10-26 15:38:58 · 857 阅读 · 0 评论