特征选择 (feature_selection)

2023-11-05

当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:

  • 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
  • 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除移除低方差法外,本文介绍的其他方法均从相关性考虑。

根据特征选择的形式又可以将特征选择方法分为3种:

  • Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
  • Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

特征选择主要有两个目的:

  • 减少特征数量、降维,使模型泛化能力更强,减少过拟合;
  • 增强对特征和特征值之间的理解。

  拿到数据集,一个特征选择方法,往往很难同时完成这两个目的。通常情况下,选择一种自己最熟悉或者最方便的特征选择方法(往往目的是降维,而忽略了对特征和数据理解的目的)。本文将结合 Scikit-learn提供的例子 介绍几种常用的特征选择方法,它们各自的优缺点和问题。

Filter

1. 移除低方差的特征 (Removing features with low variance)

  假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。而且实际当中,一般不太会有95%以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。

>>> from sklearn.feature_selection import VarianceThreshold
>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
>>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
>>> sel.fit_transform(X)
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])

果然, VarianceThreshold 移除了第一列特征,第一列中特征值为0的概率达到了5/6.

2. 单变量特征选择 (Univariate feature selection)

  单变量特征选择的原理是分别单独的计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。

  对于分类问题(y离散),可采用:
    卡方检验f_classifmutual_info_classif互信息
  对于回归问题(y连续),可采用:
    皮尔森相关系数f_regressionmutual_info_regression最大信息系数

  这种方法比较简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效)。这种方法有许多改进的版本、变种。

  单变量特征选择基于单变量的统计测试来选择最佳特征。它可以看作预测模型的一项预处理。==Scikit-learn将特征选择程序用包含 transform 函数的对象来展现==:

  • SelectKBest 移除得分前 k 名以外的所有特征(取top k)
  • SelectPercentile 移除得分在用户指定百分比以后的特征(取top k%)
  • 对每个特征使用通用的单变量统计检验: 假正率(false positive rate) SelectFpr, 伪发现率(false discovery rate) SelectFdr, 或族系误差率 SelectFwe.
  • GenericUnivariateSelect 可以设置不同的策略来进行单变量特征选择。同时不同的选择策略也能够使用超参数寻优,从而让我们找到最佳的单变量特征选择策略。

  将特征输入到评分函数,返回一个单变量的f_score(F检验的值)或p-values(P值,假设检验中的一个标准,P-value用来和显著性水平作比较),注意SelectKBest 和 SelectPercentile只有得分,没有p-value。

  • For classification: chi2, f_classif, mutual_info_classif
  • For regression: f_regression, mutual_info_regression

Notice:
  The methods based on F-test estimate the degree of linear dependency between two random variables. (F检验用于评估两个随机变量的线性相关性)On the other hand, mutual information methods can capture any kind of statistical dependency, but being nonparametric, they require more samples for accurate estimation.(另一方面,互信息的方法可以捕获任何类型的统计依赖关系,但是作为一个非参数方法,估计准确需要更多的样本)

Feature selection with sparse data:
  If you use sparse data (i.e. data represented as sparse matrices), chi2, mutual_info_regression, mutual_info_classif will deal with the data without making it dense.(如果你使用稀疏数据(比如,使用稀疏矩阵表示的数据), 卡方检验(chi2)、互信息回归(mutual_info_regression)、互信息分类(mutual_info_classif)在处理数据时可保持其稀疏性.)

Examples:
Univariate Feature Selection
Comparison of F-test and mutual information

2.1 卡方(Chi2)检验

  经典的卡方检验是检验定性自变量对定性因变量的相关性。比如,我们可以对样本进行一次 chi2 chi2 测试来选择最佳的两项特征:

>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)
2.2 Pearson相关系数 (Pearson Correlation)

  皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。

  Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数 和p-value.

import numpy as np
from scipy.stats import pearsonr
np.random.seed(0)
size = 300
x = np.random.normal(0, 1, size)
# pearsonr(x, y)的输入为特征矩阵和目标向量
print("Lower noise", pearsonr(x, x + np.random.normal(0, 1, size)))
print("Higher noise", pearsonr(x, x + np.random.normal(0, 10, size)))
>>>
# 输出为二元组(sorce, p-value)的数组
Lower noise (0.71824836862138386, 7.3240173129992273e-49)
Higher noise (0.057964292079338148, 0.31700993885324746)

这个例子中,我们比较了变量在加入噪音之前和之后的差异。当噪音比较小的时候,相关性很强,p-value很低。

  Scikit-learn提供的 f_regrssion 方法能够批量计算特征的f_score和p-value,非常方便,参考sklearn的 pipeline

  Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。例如:

x = np.random.uniform(-1, 1, 100000)
print pearsonr(x, x**2)[0]
-0.00230804707612

  更多类似的例子参考 sample plots 。另外,如果仅仅根据相关系数这个值来判断的话,有时候会具有很强的误导性,如 Anscombe’s quartet ,最好把数据可视化出来,以免得出错误的结论。

2.3 互信息和最大信息系数 (Mutual information and maximal information coefficient (MIC)

  经典的互信息(互信息为随机变量X与Y之间的互信息 I(X;Y) I(X;Y)为单个事件之间互信息的数学期望)也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:

I(X;Y)=E[I(xi;yj)]=xiϵXyjϵYp(xi,yj)logp(xi,yj)p(xi)p(yj) I(X;Y)=E[I(xi;yj)]=∑xiϵX∑yjϵYp(xi,yj)logp(xi,yj)p(xi)p(yj)

  互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。

  最大信息系数克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在[0,1]。 minepy 提供了MIC功能。

反过头来看 y=x2 y=x2这个例子,MIC算出来的互信息值为1(最大的取值)。

from minepy import MINE
m = MINE()
x = np.random.uniform(-1, 1, 10000)
m.compute_score(x, x**2)
print(m.mic())
>>>1.0

  MIC的统计能力遭到了 一些质疑 ,当零假设不成立时,MIC的统计就会受到影响。在有的数据集上不存在这个问题,但有的数据集上就存在这个问题。

2.4 距离相关系数 (Distance Correlation)

  距离相关系数是为了克服Pearson相关系数的弱点而生的。在 x x x2 x2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。

  R的 energy 包里提供了距离相关系数的实现,另外这是 Python gist 的实现。

> x = runif (1000, -1, 1)
> dcor(x, x**2)
[1] 0.4943864

  尽管有 MIC 和 距离相关系数 在了,但当变量之间的关系接近线性相关的时候,Pearson相关系数仍然是不可替代的。
  第一,Pearson相关系数计算速度快,这在处理大规模数据的时候很重要。
  第二,Pearson相关系数的取值区间是[-1,1],而MIC和距离相关系数都是[0,1]。这个特点使得Pearson相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值能够表示强度。当然,Pearson相关性有效的前提是两个变量的变化关系是单调的。

2.5 基于模型的特征排序 (Model based ranking)

  这种方法的思路是直接使用你要用的机器学习算法,针对 每个单独的特征 和 响应变量建立预测模型。假如 特征 和 响应变量 之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者 扩展的线性模型 等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证

  在 波士顿房价数据集 上使用sklearn的 随机森林回归 给出一个_单变量选择_的例子(这里使用了交叉验证):

from sklearn.cross_validation import cross_val_score, ShuffleSplit
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import numpy as np

# Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]

rf = RandomForestRegressor(n_estimators=20, max_depth=4)
scores = []
# 单独采用每个特征进行建模,并进行交叉验证
for i in range(X.shape[1]):
    score = cross_val_score(rf, X[:, i:i+1], Y, scoring="r2",  # 注意X[:, i]和X[:, i:i+1]的区别
                            cv=ShuffleSplit(len(X), 3, .3))
    scores.append((format(np.mean(score), '.3f'), names[i]))
print(sorted(scores, reverse=True))

[('0.620', 'LSTAT'), ('0.591', 'RM'), ('0.467', 'NOX'), ('0.342', 'INDUS'), ('0.305', 'TAX'), ('0.240', 'PTRATIO'), ('0.206', 'CRIM'), ('0.187', 'RAD'), ('0.184', 'ZN'), ('0.135', 'B'), ('0.082', 'DIS'), ('0.020', 'CHAS'), ('0.002', 'AGE')]

Wrapper

3. 递归特征消除 (Recursive Feature Elimination)

  递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练

  sklearn官方解释:对特征含有权重的预测模型(例如,线性模型对应参数coefficients),RFE通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每个特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。

  RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征:对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

示例:
Recursive feature elimination: 一个递归特征消除的示例,展示了在数字分类任务中,像素之间的相关性。
Recursive feature elimination with cross-validation: 一个递归特征消除示例,通过交叉验证的方式自动调整所选特征的数量。

Embedded

4. 使用SelectFromModel选择特征 (Feature selection using SelectFromModel)

  单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,另一种主流的特征选择方法是基于机器学习模型的方法。有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型,SVM,决策树,随机森林等等。其实Pearson相关系数等价于线性回归里的标准化回归系数。

  SelectFromModel 作为meta-transformer,能够用于拟合后任何拥有coef_feature_importances_ 属性的预测模型。 如果特征对应的coef_ 或 feature_importances_ 值低于设定的阈值threshold,那么这些特征将被移除。除了手动设置阈值,也可通过字符串参数调用内置的启发式算法(heuristics)来设置阈值,包括:平均值(“mean”), 中位数(“median”)以及他们与浮点数的乘积,如”0.1*mean”。

Examples
Feature selection using SelectFromModel and LassoCV: 在阈值未知的前提下,选择了Boston dataset中两项最重要的特征。

4.1 基于L1的特征选择 (L1-based feature selection)

  使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。特别指出,常用于此目的的稀疏预测模型有 linear_model.Lasso(回归), linear_model.LogisticRegression 和 svm.LinearSVC(分类):

>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
>>> model = SelectFromModel(lsvc, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 3)

  使用feature_selection库的SelectFromModel类结合带L1以及L2惩罚项的逻辑回归模型:

from sklearn.feature_selection import SelectFromModel
#带L1和L2惩罚项的逻辑回归作为基模型的特征选择
#参数threshold为权值系数之差的阈值
SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)

  对于SVM和逻辑回归,参数C控制稀疏性:C越小,被选中的特征越少。对于Lasso,参数alpha越大,被选中的特征越少。

示例:
Classification of text documents using sparse features: 不同算法使用基于L1的特征选择进行文档分类的对比。

Note:

L1恢复和压缩感知 (L1-recovery and compressive sensing)
  对于一个好的alpha值,在满足特定条件下, Lasso 仅使用少量观测值就能够完全恢复出非零的系数。特别地,样本的数量需要“足够大”,否则L1模型的表现会充满随机性,所谓“足够大”取决于非零系数的数量,特征数量的对数,噪声的数量,非零系数的最小绝对值以及设计矩阵X的结构。此外,设计矩阵必须拥有特定的属性,比如不能太过相关(correlated)。 对于非零系数的恢复,还没有一个选择alpha值的通用规则 。alpha值可以通过交叉验证来设置(LassoCV or LassoLarsCV),尽管这也许会导致模型欠惩罚(under-penalized):引入少量非相关变量不会影响分数预测。相反BIC (LassoLarsIC) 更倾向于设置较大的alpha值。
Reference Richard G. Baraniuk “Compressive Sensing”, IEEE Signal Processing Magazine [120] July 2007

4.2 随机稀疏模型 (Randomized sparse models)

  基于L1的稀疏模型的局限在于,当面对一组互相关的特征时,它们只会选择其中一项特征。为了减轻该问题的影响可以使用随机化技术,通过_多次重新估计稀疏模型来扰乱设计矩阵_,或通过_多次下采样数据来统计一个给定的回归量被选中的次数_。——==稳定性选择 (Stability Selection)==

  RandomizedLasso 实现了使用这项策略的Lasso,RandomizedLogisticRegression 使用逻辑回归,适用于分类任务。要得到整个迭代过程的稳定分数,你可以使用 lasso_stability_path

  注意到对于非零特征的检测,要使随机稀疏模型比标准F统计量更有效, 那么模型的参考标准需要是稀疏的,换句话说,非零特征应当只占一小部分。

示例:
Sparse recovery: feature selection for sparse linear models: 比较了不同的特征选择方法,并讨论了它们各自适用的场合。

参考文献:
N. Meinshausen, P. Buhlmann, “Stability selection”, Journal of the Royal Statistical Society, 72 (2010)
F. Bach, “Model-Consistent Sparse Estimation through the Bootstrap”

4.3 基于树的特征选择 (Tree-based feature selection)

  基于树的预测模型(见 sklearn.tree 模块,森林见 sklearn.ensemble 模块)能够用来计算特征的重要程度,因此能用来去除不相关的特征(结合 sklearn.feature_selection.SelectFromModel):

>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> clf = ExtraTreesClassifier()
>>> clf = clf.fit(X, y)
>>> clf.feature_importances_  
array([ 0.04...,  0.05...,  0.4...,  0.4...])
>>> model = SelectFromModel(clf, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape               
(150, 2)

示例:
Feature importances with forests of trees: 从模拟数据中恢复有意义的特征。
Pixel importances with a parallel forest of trees: 用于人脸识别数据的示例。

5. 将特征选择过程融入pipeline (Feature selection as part of a pipeline)

  特征选择常常被当作学习之前的一项预处理。在scikit-learn中推荐使用
sklearn.pipeline.Pipeline:

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)

  在此代码片段中,将 sklearn.svm.LinearSVC 和 sklearn.feature_selection.SelectFromModel 结合来评估特征的重要性,并选择最相关的特征。之后 sklearn.ensemble.RandomForestClassifier 模型使用转换后的输出训练,即只使用被选出的相关特征。你可以选择其它特征选择方法,或是其它提供特征重要性评估的分类器。更多详情见 sklearn.pipeline.Pipeline 相关示例。
  
关于更多,参见另一个文档:
《基于模型的特征选择详解 (Embedded & Wrapper)》


小结:

所属方式 说明
VarianceThreshold Filter 方差选择法(移除低方差的特征)
SelectKBest Filter 可选关联系数、卡方校验、最大信息系数作为得分计算的方法
RFE Wrapper 递归地训练基模型,将权值系数较小的特征从特征集合中消除
SelectFromModel Embedded 训练基模型,选择权值系数较高的特征

参考:
[1] [1.13. Feature selection](http://scikit-learn.org/stable/modules/feature_selection.html#feature-selection)
[2] [1.13 特征选择](http://sklearn.lzjqsdd.com/modules/feature_selection.html#feature-selection)
[3] [干货:结合Scikit-learn介绍几种常用的特征选择方法](http://www.tuicool.com/articles/ieUvaq)
[4] [使用sklearn做单机特征工程](http://www.cnblogs.com/jasonfreak/p/5448385.html#3601031)
[5] [使用sklearn优雅地进行数据挖掘](http://www.cnblogs.com/jasonfreak/p/5448462.html)
[6] [谁动了我的特征?——sklearn特征转换行为全记录](http://www.cnblogs.com/jasonfreak/p/5619260.html)

注:
  文档[4]实际上是用sklearn实现整个数据挖掘流程,特别是在提高效率上sklearn的并行处理,流水线处理,自动化调参,持久化是使用sklearn优雅地进行数据挖掘的核心。这里是一个简单的总结,具体可查看该文档:

类或方法 说明
sklearn.pipeline Pipeline 流水线处理
sklearn.pipeline FeatureUnion 并行处理
sklearn.grid_search GridSearchCV 网格搜索自动化调参
externals.joblib dump 数据持久化
externals.joblib load 从文件系统中加载数据至内存
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特征选择 (feature_selection) 的相关文章

  • 因果推断-PSM的原理及python实现

    目录 一 背景 员工技能培训真的是浪费时间吗 二 PSM的原理及python实现 1 PSM的原理 1 1 计算倾向性得分 1 2 匹配对照组样本 1 3 平衡性检查 1 4 敏感度分析 2 PSM的python实现 一 背景 员工技能培训
  • python数据分析与可视化——第四章实训

    1 导入模块 import pandas as pd import numpy as np import matplotlib pyplot as plt plt rcParams font sans serif SimHei 用来正常显示
  • LDSC:连锁不平衡回归分析

    欢迎关注 生信修炼手册 LDSC全称如下 linkage disequilibrium score regression 简称LDSR或者LDSC 在维基百科中 对该技术进行了简单介绍 通过GWAS分析可以识别到与表型相关的SNP位点 然而
  • 独家

    作者 Damir Yalalov 翻译 陈超 校对 赵茹萱 本文约1100字 建议阅读5分钟 本文介绍了ChatGPT如何解决简单的机器学习任务并给出了鸢尾花分类和城市预测两个案例 一句话概括 ChatGPT可以帮助你完成简单的机器学习任务
  • 3. 决策树原理及数学建模实战

    决策树 文章目录 一 概念 二 ID3 2 1 概念 2 2 算法流程 2 3 信息熵 2 4 特点 三 C4 5 3 1 概念 3 2 信息增益率 3 3 处理连续值 3 4 过拟合问题 3 4 1 提出 3 4 2 剪枝 四 CART
  • 利用Python制作本地Excel的查询与生成的程序

    前言 大家好 今天教大家利用Python制作本地Excel的查询与生成的程序 需求 制作一个程序 有一个简单的查询入口 实现Excel的查询与生成 实验步骤 1打开一个exe 弹出一个界面 2有一个查询 卡号 点击查询 3下方展示查询的结果
  • 安装用jieba,实现用TF-IDF算法进行关键词的提取

    文本知识提取 目录 1 安装jieba 2 TF IDF算法 2 1算法的定义 2 2算法的应用 1 词性标注 2 去停用词 3 关键词提取 1 安装jieba Jieba分词官网 https github com fxsjy jieba
  • 活动报名

    活动议程 日期 5月5日 周五 时间 主题 14 30 14 35 开场简介 袁洋 清华大学交叉信息学院助理教授 青源会会员 14 35 15 20 环境不变最小二乘回归 方聪 北京大学智能学院助理教授 青源会会员 15 20 15 50
  • 数据中台与数据仓库区别

    1 数据源不同 先从数据来源上来说 数据中台的数据来源可以是结构化数据或者非结构化的数据 而传统数仓的数据来源主要是业务数据库 数据格式也是以结构化数据为主 2 数据的处理不同 数据中台不仅仅是汇聚企业各种数据 而且让这些数据遵循相同的标准
  • 数据挖掘—数据预处理

    文章目录 数据预处理 1 数据清洗 缺失值处理 异常值处理 2 数据集成 实体识别 冗余属性识别 数据变换 简单函数变换 规范化 连续属性离散化 属性构造 3 数据规约 属性归约 数值归约 Python主要数据预处理函数 数据预处理 数据预
  • 软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址

    软考 中级软件设计师 程序语言基础 表达式 提示 系列被面试官问的问题 我自己当时不会 所以下来自己复盘一下 认真学习和总结 以应对未来更多的可能性 关于互联网大厂的笔试面试 都是需要细心准备的 1 自己的科研经历 科研内容 学习的相关领域
  • 全网最详细的Python安装教程,超级详细·小白秒懂!!!

    目录 1 安装版本说明 2 准备工作 确定操作系统及位数 2 1 确定方法1 2 2 确定方法2 3 下载Python安装包 4 安装Python 5 测试Python是否安装成功 6 Python安装成功后找不到编写代码的桌面快捷方式 7
  • 拼多多商品价格监控自动化API接口获取拼多多商品详情数据API接口

    随着电子商务的飞速发展 越来越多的人选择在网上购物 在这个充满竞争的市场中 拼多多以其独特的商业模式和创新的营销手段 迅速崛起成为中国领先的电商平台之一 为了更好地满足消费者的需求 拼多多提供了丰富的API接口 使得开发者可以方便地获取商品
  • WOA-BILSTM-Attention基于鲸鱼算法优化双向长短期记忆网络结合注意力机制回归预测,多变量输入模型

    文章目录 效果一览 文章概述 订阅专栏只能获取专栏内一份代码 部分源码 参考资料
  • 人工智能数据挖掘:发掘信息的新境界

    导言 人工智能数据挖掘作为信息时代的利器 通过智能算法和大数据技术的结合 为企业 学术研究和社会决策提供了前所未有的洞察力 本文将深入探讨人工智能在数据挖掘领域的应用 技术挑战以及对未来的影响 1 人工智能数据挖掘的基本原理 数据预处理 清
  • 天猫数据分析-天猫查数据软件-11月天猫平台饮料市场品牌及店铺销量销额数据分析

    今年以来 饮料是快消品行业中少数保持稳定增长的品类之一 11月份 饮料市场同样呈现较好的增长态势 根据鲸参谋电商数据分析平台的相关数据显示 今年11月份 天猫平台上饮料市场的销量为2700万 环比增长约42 同比增长约28 销售额为13亿
  • Python-一键爬取图片、音频、视频资源

    前言 使用Python爬取任意网页的资源文件 比如图片 音频 视频 一般常用的做法就是把网页的HTML请求下来通过XPath或者正则来获取自己想要的资源 这里我做了一个爬虫工具软件 可以一键爬取资源 媒体文件 但是需要说明的是 这里爬取资源
  • 深入挖掘:Python中的Statsmodels库高级应用

    写在开头 随着数据科学的发展 解决更为复杂问题的关键往往在于深入了解数据并采用更高级的分析工具 本文将带您深入探讨Python中的Statsmodels库 并引入一些高级功能 为更深入的数据挖掘奠定基础 1 方差分析 1 1 方差分析概念
  • ResNet实战:CIFAR-10数据集分类

    本节将使用ResNet实现CIFAR 10数据集分类 7 2 1 CIFAR 10 数据集简介 CIFAR 10数据集共有60000幅彩色图像 这些图像是32 32像素的 分为10个类 每类6000幅图 这里面有50000幅用于训练 构成了
  • Pendulum详解1——Pendulum库入门指南 - 时光的艺术

    写在开头 时间 是编程世界中不可或缺的元素 无论是事件调度 数据分析 还是用户界面的显示 时间都扮演着关键的角色 然而 在Python的标准库 datetime 中 我们经常面临繁琐的操作和限制 为了摆脱这些束缚 我们引入了一个更加强大和灵

随机推荐

  • Java中this关键字

    含义 this关键字指代当前对象 本质就是 创建好的对象的地址 当一个对象创建后 Java虚拟机就会给对象分配一个内存空间和一个引用自身的指针 这个指针的名字就是this 用法 1 访问类中的成员变量 用来区分成员变量和局部变量 publi
  • 关于JDBC中properties默认编码格式为ISO-8859-1导致使用资源绑定器的getString方法出现乱码的解决办法

    在JDBC的注册驱动与连接数据库方面 通常将driver url user password来放入配置文件中 并使用资源绑定器ResourceBundle来更快捷灵活地进行编程 而资源绑定器的实例方法getString key 如果传入的k
  • 区块链相关

    区块链 一个个区块组成的链表 一 密码学原理 哈希碰撞 x不等于y 但是H x H y 不同的输入 输出却一致 这就称为 哈希碰撞 collision resistance puzzle friendly 不能预测输入最终的输出结果 hid
  • Unity 鼠标控制物体的移动

    一 鼠标控制物体移动 using System Collections using System Collections Generic using UnityEngine public class ControlMove MonoBeha
  • 试用74LS161和必要的门电路实现11进制计数器(要求用同步置数法实现)

    题目要求实现11进制计数器 则电路共有11个有效状态 我们可以选择0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010这11个状态作为电路的有效状态 按照上述状态选择方式 应向下图示接
  • 【 PMU】信号生成、采样、分割、估计器应用和误差计算(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 PMU 信号生成 采样 分割 估计器应用和
  • 一个简单的虹膜定位程序

    一个简单的虹膜定位实现 虹膜定位程序 clear close all I imread ip1 jpg f rgb2gray I imhist f 求图像的直方图 F Size M F Size N size f 获取f的行和列 T 84
  • Java驱动方式JDBC连接SQL Server

    Java驱动方式JDBC连接SQL Server 第一步 下载微软官方的SQL Server JDBC 驱动程序 6 0 https www microsoft com zh CN download details aspx id 1177
  • 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性

    设顺序表va中的数据元素递增有序 试写一算法 将x插入到顺序表的适当位置上 以保持该表的有序性 先建立一个待插入的结点 然后依次与与链表中的各结点的数据域比较大小 找到插入该结点的位置 最后插入该结点 算法如下 include
  • 遇到的debug整理20190107

    已解决 最后的链结失败 错误的值 RT0 o relocation R X86 64 PC32 against symbol phgTetFaceVertexi can not be used when making a shared ob
  • Java学习笔记-多线程

    4 5 多线程 线程与进程 进程 是指一个内存中运行的应用程序 每个进程都有一个独立的内存空间 线程 是进程中的一个执行路径 共享一个内存空间 线程之间可以自由切换 并发执行 一个进程最少有一个线程 线程实际上是进程基础之上的进一步划分 一
  • 【算法】回溯

    子集树 include
  • C++ 指向类成员函数的指针

    记录两种可以间接调用类成员函数的方法 一种是直接使用函数指针 另一种使用C 11的function模板配合bind函数实现对固定类对象的成员函数调用 定义类 新建类的对象 class Cfun public void fun int x c
  • 【Matlab】 读取文件各种方法

    本技术支持指南主要处理 ASCII binary and MAT files 要得到MATLAB中可用来读写各种文件格式的完全函数列表 可以键入以下命令 help iofunMATLAB中有两种文件I O程序 high level and
  • 五分钟了解机器学习十大算法

    作者 Fahim ul Haq 译者 刘志勇 策划 赵钰莹 编辑 程序员大白公众号 仅作学术交流 如有侵权 请联系删文 本文为有志于成为数据科学家或对此感兴趣的读者们介绍最流行的机器学习算法 机器学习是该行业的一个创新且重要的领域 我们为机
  • 关于安装第三方包:dpkg: 处理软件包 redis-server (--configure)时出错:----说是redis-server未配置等原因,导致无法安装成功---bug

    在使用memcached 安装时报的redis错误 tarena tarena sudo apt get install memcached sudo tarena 的密码 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态
  • 这才是真正的技术,从0到高手的进阶!

    很多人以为学会了urlib模块和xpath等几个解析库 学了Selenium就会算精通爬虫了 但到外面想靠爬虫技术接点私活 才发现寸步难行 今天就告诉你 真正的爬虫高手应该学哪些东西 就算你毫无基础 你也能知道应该怎么去学习 话不多说 我们
  • 【Excel自动化办公Part6】:插入图片、插入柱状图、插入条形图

    目录 一 插入图片 二 插入柱状图 三 插入条形图 一 插入图片 sheet add image 创建的对象 单元格 导入模块 from openpy drawing image import Image 例 将一张云中君的皮肤图片插入到表
  • 部署zabbix分布式监控

    使用zabbix部署分布式监控 一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix能监视各种网络参数 保证服务器系统的安全运营 并提供灵活的通知机制以让系统管理员快速定位 解决存在的各种问题 zabb
  • 特征选择 (feature_selection)

    当数据预处理完成后 我们需要选择有意义的特征输入机器学习的算法和模型进行训练 通常来说 从两个方面考虑来选择特征 特征是否发散 如果一个特征不发散 例如方差接近于0 也就是说样本在这个特征上基本上没有差异 这个特征对于样本的区分并没有什么用