首页 » 网站建设 » 668php源码技巧_高级特色工程和预处理的四个技巧

668php源码技巧_高级特色工程和预处理的四个技巧

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

可以说,开拓机器学习模型的两个最主要的步骤是特色工程和预处理。
特色工程包括特色的创建,而预处理涉及清理数据。

折磨数据,它会坦白任何事情。
- 罗纳德科斯

668php源码技巧_高级特色工程和预处理的四个技巧

我们常常花费大量韶光将数据精髓精辟成对付建模有用的东西。
为了使这项事情更有效,我想分享四个技巧,可以帮助你进行特色工程和预处理。

668php源码技巧_高级特色工程和预处理的四个技巧
(图片来自网络侵删)

要把稳到,领域知识是特色工程时最主要的事情之一(陈词谰言)。
更好地理解你利用的特色可以帮助防止陷入欠拟合和过拟合的情形

本链接是特色工程剖析的条记(https://github.com/MaartenGr/feature-engineering)。

1. 重新采样不平衡数据

实际上,我们常常会碰着不平衡的数据。
如果目标数据只有轻微的不平衡,这并不一定是一个问题。
可以通过对数据利用适当的验证方法来办理这个问题,比如平衡精度(Balanced Accuracy)精确召回曲线(Precision-Recall Curves)F1分数(F1-score)

不幸的是,情形并非总是如此,目标变量可能非常不平衡(例如,10:1)。
这种情形下,我们可以对该少数类(即样本数少的种别)进行过采样,以便利用一种称为SMOTE的技能来引入平衡。

SMOTE

SMOTE(https://jair.org/index.php/jair/article/view/10302)是合成少数类过采样技能 (Synthetic Minority Oversampling Technique)的缩写,是一种用于增加少数类样本的过采样技能。

它通过不雅观察目标的特色空间和检测最近邻来天生新的样本。
然后,在相邻样本的特色空间内,大略地选择相似的样本,每次随机地改变一列。

要实现SMOTE的模块可以在imbalanced-learn包(https://imbalanced-learn.readthedocs.io/en/stable/index.html)中找到。
导入该包并利用fit_transform方法:

import pandas as pdfrom imblearn.over_sampling import SMOTE# 导入数据创建x和ydf = pd.read_csv('creditcard_small.csv')X = df.iloc[:,:-1]y = df.iloc[:,-1].map({1:'Fraud', 0:'No Fraud'})# 重新采样数据X_resampled, y_resampled = SMOTE(sampling_strategy={\"大众Fraud\"大众:1000}).fit_resample(X, y)X_resampled = pd.DataFrame(X_resampled, columns=X.columns)

正如你所看到的,模型成功地对目标变量进行了过采样。
当利用SMOTE进行过采样时,可以采取以下几种策略:

“少数类(minority)”:仅重采样少数类;“非少数类(not minority)”:重新采样除少数类以外的其他类;“非多数类(not majority)”:重新采样除了多数类的其他类;'所有(all)':重新采样所有类;\"大众词典(dict)\"大众:键为目标类,值对应于每个目标类所需的样本数量。

我选择利用字典来指定我想要在多大程度上过采样数据。

附加提示1:如果数据集中有分类变量,那么可能会为那些不能发生的变量创建值。
例如,如果有一个名为isMale的变量,它只能是0或1,SMOTE可能会创建0.365作为值。

这种情形下,可以利用SMOTENC,它考虑到了分类变量的性子。
这个版本也可以在imbalanced-learn包(https://imbalanced-learn.readthedocs.io/en/stable/index.html)中找到。

附加提示2:确保在演习集与测试集分割之后进行过采样,并且只对演习数据进行过采样。
由于常日不在合成数据上测试模型的性能。

2. 创建新的特色

为了提高模型的质量和预测能力,常常从现有变量中创建新特色。
我们可以在每对变量之间创建一些交互(例如,乘法或除法),希望找到一个有趣的新特色。
然而,这是一个漫长的过程,须要大量的编码。
幸运的是,这可以利用深度特色综合(Deep Feature Synthesis)自动完成。

深度特色综合

深度特色综合(DFS)是一种能够快速创建具有不同深度的新变量的算法。
例如,不仅可以对列进行相乘,你也可以选择先将列A与列B相乘,然后再添加列C。

首先,让我先容将用于示例的数据。
我选择利用人力资源剖析数据(https://www.kaggle.com/lnvardanyan/hr-analytics)剖析数据,由于这些特色很随意马虎阐明:

大略地根据我们的直觉,我们可以将 average_monthly_hours 除以number_project的值添加为一个新变量。
然而,如果我们只随着直觉,我们可能会错过很多的关系。

如果你的数据如果是一个大略的表格,你可以大略地按照下面的代码:

import featuretools as ftimport pandas as pd# 创建实体turnover_df = pd.read_csv('turnover.csv')es = ft.EntitySet(id = 'Turnover')es.entity_from_dataframe(entity_id = 'hr', dataframe = turnover_df, index = 'index')# 指定trans_primitives参数以实行深度特色综合feature_matrix, feature_defs = ft.dfs(entityset = es, target_entity = 'hr', trans_primitives = ['add_numeric', 'multiply_numeric'], verbose=True)

第一步是创建一个实体(entity),如果须要,可以从这个实体与其他表创建关系。
接下来,我们可以大略地运行ft.dfs来创建新变量。
我们指定参数trans_primitives来表示以什么办法创建变量。
这里我们选择将数值变量相加或相乘。

正如你在上面的图中所看到的,我们仅利用几行代码就创建了其余668个特色。
创建的一些特色示例:

last_evaluate乘以satisfaction_levelleft乘以promotion_last_5yearsaverage_monthly_hours乘以satisfaction_level加上time_spend_company

附加技巧1:把稳这里的实现是比较大略根本的。
DFS最大的优点是它可以进行表之间的聚合中创建新的变量。
有关示例,请拜会此链接(https://docs.featuretools.com/loading_data/using_entitysets.html)。

附加技巧2:运行ft.list_primitives(),以查看可以实行的聚合的完全列表。
它乃至处理韶光戳(timestamps)、空值(null values)和经纬度信息(long/lat information)。

3. 处理缺失落值

像往常一样,没有一种处理缺失落值的最佳方法。
根据你的数据,只需用特定组的均匀值或模式添补它们就足够了。
然而,有一些高等技能利用数据的已知部分来估算(impute)缺失落的值。

个中一种方法来自Scikit-Learn中的一个新包叫做Iterative Imputer,它是基于R措辞(MICE包)来估算缺失落的变量。

Iterative Imputer(迭代输入器)

虽然python是开拓机器学习模型的一种很好的措辞,但是仍旧有很多方法在R中事情得更好。

Iterative Imputer是由Scikit-Learn开拓的,它将每个缺失落值的特色作为其他特色的函数来建模。
它利用该函数的值作为估算。
在每个步骤中,选择一个特色作为输出y,其他所有特色作为输入的X。
然后在X和y上演习一个回归器,用来预测y的缺失落值。

让我们看一个例子。
我利用的数据是著名的titanic数据集。
在这个数据集中,Age列短缺我们希望添补的值。
代码总是很大略:

# 显示的导入enable_iterative_imputer后# 再从sklearn.impute 导入IterativeImputerfrom sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputerfrom sklearn.ensemble import RandomForestRegressorimport pandas as pd# 载入数据titanic = pd.read_csv(\公众titanic.csv\公众)titanic = titanic.loc[:, ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare']]# 利用随机森林估计器imp = IterativeImputer(RandomForestRegressor(), max_iter=10, random_state=0)titanic = pd.DataFrame(imp.fit_transform(titanic), columns=titanic.columns)

这种方法的优点是它许可利用你所选择的估计器(estimator)。
我利用随机森林作为估计器来仿照在R中常常利用的missForest。

附加提示1:如果你有足够的数据,那么大略地删除短缺数据的示例可能是一个有吸引力的选项。
但是,请记住,它可能会在你的数据中产生偏差,由于丢失的数据可能遵照了你错过的模式。

附加提示2:Iterative Imputer许可利用不同的估计器。
经由一些测试,我创造乃至可以利用Catboost作为估计器!不幸的是,LightGBM和XGBoost不能事情,由于它们的随机状态名(random state name)不同。

4. 非常值检测

如果不能很好地理解数据,就很难检测出非常值。
如果你很理解数据,那么你可以很随意马虎地指天命据还具故意义的阈值。

有时这是不可能的,由于很难完备理解数据。
这种情形下,你可以利用离群点检测算法,比如盛行的Isolation Forest。

Isolation Forest

在Isolation Forest算法中,关键字是Isolation(伶仃)。
从实质上说,该算法检讨了样本是否随意马虎被分离。
这样样本就产生了一个伶仃编号,这个伶仃编号由随机决策树中伶仃该样本所需的分割数来打算。
这个伶仃编号在所有天生的树上进行均匀。

如果算法只须要做几次分割就能找到一个样本,那么该样本更有可能是一个非常样本。
分割本身也是随机划分的,这样非常样本在树中每每很浅(节点到根节点的路径长度短)。
因此,当伶仃编号在所有树中都很小时,该样本很可能是非常的。

为了展示一个例子,我再次利用了我们之前利用的信用卡数据集:

from sklearn.ensemble import IsolationForestimport pandas as pdimport seaborn as sns# 预测和可视化离群点credit_card = pd.read_csv('creditcard_small.csv').drop(\"大众Class\公众, 1)clf = IsolationForest(contamination=0.01, behaviour='new')outliers = clf.fit_predict(credit_card)sns.scatterplot(credit_card.V4, credit_card.V2, outliers, palette='Set1', legend=False)

附加提示1:有一个扩展版的Isolation Forest(https://github.com/sahandha/eif)可用,它改进了一些缺陷。
然而,评论褒贬不一(https://towardsdatascience.com/outlier-detection-with-extended-isolation-forest-1e248a3fe97b)。

结论

希望本文中的技巧能够帮助你设计和预处理这些特色,Jupyter写的条记在本链接(https://github.com/MaartenGr/feature-engineering/blob/master/Engineering%20Tips.ipynb)

标签:

相关文章

大数据时代,介绍数据的力量与未来

大数据时代,数据已成为国家、企业、个人争夺的宝贵资源。在这个信息爆炸的时代,大数据如何改变我们的生活、推动社会进步?本文将从大数据...

网站建设 2024-12-16 阅读0 评论0

大数据时代,信息传送的变革与创新

随着信息技术的飞速发展,大数据已经渗透到各行各业,成为推动社会进步的重要力量。在这样一个信息爆炸的时代,如何高效、准确地传送大数据...

网站建设 2024-12-16 阅读0 评论0

大数据校赛,探索未来,共筑智慧校园

近年来,随着互联网、物联网、大数据等技术的飞速发展,大数据已成为我国社会发展的重要驱动力。为了培养大数据领域的专业人才,提高我国大...

网站建设 2024-12-16 阅读0 评论0

大数据标识,未来数据时代的“身份证”

随着信息技术的飞速发展,大数据时代已经来临。在这个时代,数据已经成为国家、企业和个人重要的战略资源。而大数据标识作为一种新兴的数据...

网站建设 2024-12-16 阅读0 评论0