问题标签 [feature-engineering]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python - 分类最小方差的 bin 大小
我想将我的特征“年龄”从连续变量更改为用于二元分类的年龄范围的分类变量,如下所示:
但是我想以最佳方式对其进行拆分,以便最有效地对数据进行分类。即年龄范围内的类的方差被最小化,而不是过度拟合。
是否有一个包有一种方法,可以在像这样拆分数据时最小化差异,还是我必须自己写一个?
machine-learning - 神经网络特征组合
假设我们有一个具有足够多的隐藏层、每层隐藏单元和迭代的神经网络,这样这些参数不会影响网络的预测。
给定特征 x1, x2, ..., xn,是否有可能(证明)在给定特征子集(x1 到 xn)的情况下,一系列潜在特征是否是冗余的。也就是说,给定这些特征(x1 到 xn),神经网络能否识别其他特征,例如:
- 差异或增加(x1-x49,或 x17+xn)?
- 产品和比率(x1*x1,或 x47/xn)
- 高阶多项式(或像∏(x1到xn)这样的序列的乘积)
- 基于原始特征的三角函数 (sin(x1*xn) + x17)
- 对数函数 (ln(x2*x4)/x6)
正是在这行询问中,我想知道是否存在使用神经网络的情况,您需要添加更高阶或不同的函数以使网络准确预测。
一般来说,给定足够数量的特征,网络是否有可能对任何图进行建模,如果不能,神经网络无法预测哪些功能域?
此外,是否有人可以指出引用该主题的任何研究?
谢谢!
python - 将 pandas.get_dummies 列从训练复制到测试数据
我有两个数据框,train
并且test
. 它们都具有相同的确切列名,其中包含分类字符串特征。
我正在尝试将这些特征映射到训练集中的虚拟变量,训练回归模型,然后对测试集进行相同的精确映射并将训练后的模型应用于它。
我遇到的问题是,由于test
小于train
,它恰好不包含某些分类特征的所有可能值。由于pandas.get_dummies()
似乎只是着眼于data.Series.unique()
创建新列,在以相同的方式为train
and添加虚拟列之后test
,test
现在列更少了。
那么我如何改为添加虚拟列train
,然后使用相同的确切列名test
,即使对于特定功能test
,test.feature.unique()
是 的子集train.feature.unique()
?我查看了pd.get_dummies 文档,但我认为我没有看到任何可以满足我要求的东西。任何帮助是极大的赞赏!
machine-learning - 将时间和星期几表示为机器学习中价值预测模型的特征的最佳方式是什么?
在使用机器学习中的特征并在矩阵中表示它们时,将一天中的小时和一周中的一天表示为价值预测模型的特征的推荐方法是什么?
是否对所有小时值使用 0,对小时使用 1 来表示将这些属性表示为特征的首选方式?星期几也一样?
谢谢
apache-spark - 如何对火花进行分位数离散化?
我想在没有 Spark.ML 的情况下将 RDD[Float] 分位数离散化为 10 个,所以我需要计算 10th-Percentile, 20th-Percentile...80th-Percentile,90th-Percentile
数据集很大,无法收集到本地!
有没有有效的算法来解决这个问题?
pandas - 分类特征相关
我的数据中有一些分类特征以及连续特征。对类别特征进行热编码以找到它与标签以及其他连续生物的相关性是一个好主意还是绝对坏主意?
apache-spark - 如何在 Spark 中处理最新的随机森林中的分类特征?
在随机森林的 Mllib 版本中,可以使用参数categoricalFeaturesInfo
What's about the ML Random Forest?在用户指南中有一个使用 VectorIndexer 的示例,它也可以转换向量中的分类特征,但它写的是“自动识别分类特征并对其进行索引”
在同一问题的另一个讨论中,我发现数字索引在随机森林中无论如何都被视为连续特征,建议进行一次热编码以避免这种情况,这在该算法的情况下似乎没有意义,并且特别是上面提到的官方例子!
我还注意到,当分类列中有很多类别(> 1000)时,一旦使用 StringIndexer 对它们进行索引,随机森林算法会要求我设置 MaxBin 参数,该参数应该与连续特征一起使用。这是否意味着超过 bin 数量的特征将被视为连续的,正如官方示例中指定的那样,因此 StringIndexer 对于我的分类列是可以的,还是意味着具有数字仍然名义特征的整个列将是假设变量是连续的?
machine-learning - 如何评估基于特定上下文文件的 word2vec 构建
使用 gensim word2vec,构建了一个带有一堆诉讼文件的 CBOW 模型,用于在命名实体识别问题中将单词表示为向量,但我想知道如何评估我的单词表示。如果我使用任何其他数据集,如 wordsim353(NLTK) 或谷歌的其他在线数据集,它就不起作用,因为我构建了特定于我的域文件数据集的模型。如何评估 word2vec 对词向量的表示。我希望属于相似上下文的词在向量空间中更接近。如何确保构建模型正在执行它?
我开始使用一种叫做奇数一出的技术。例如:
我使用 word2vec 训练中的单词创建了自己的数据集(用于验证)。开始评估三个词的相似上下文和一个奇怪的词脱离上下文。但是我的模型的准确率只有 30%。
上述方法真的有助于评估我的 w2v 模型吗?或者,还有更好的方法 ?
我想使用 word_similarity 度量,但我需要一个参考分数(人工评估)来评估我的模型,或者有什么技术可以做到吗?请提出任何想法或技术。
software-design - 尝试设计一个灵活的报告系统。卡住
我在为公司的报告设计面向未来的设计时遇到了一些麻烦。本质上,要求是:
- 能够从数据库中提取任何数据
- 通过填充模板(HTML、docx)从该数据生成格式化报告
- 导出到 Word 和/或 PDF
因此,最初我为每个报告创建了一个 API 端点(这是一个 Web 应用程序),并生成了 PDF 并正确格式化。
但是现在我需要将数据转换为 .docx/Word 格式,并且我正在尝试弄清楚如何设计尽可能 DRY 的东西,这样我就不必每次公司都投入大量工作决定他们需要另一份报告(他们已经这样做了两三次,这就是我意识到我已经将自己编码到角落的原因)。
到目前为止,我所做的每个报告都是通过“蛮力”方法完成的:对报告所需的查询进行编码,格式化数据,然后呈现为 PDF(通过 phantomjs 使用 HTML 到 PDF)。
当公司回来说“嘿,我们需要所有这些 Word 格式的报告时,复杂性就出现了,我们还需要 3 份其他新报告,以及一份与旧报告略有不同但 +/- 2 的报告领域”。
我只是在想出一个可靠的设计/抽象时遇到了麻烦,每次需求发生变化时,它都不会让我陷入为期一周的黑客狂欢。
apache-spark - PySpark 中的慢速特征工程
我正在尝试使用 pyspark 进行数据准备,其中包括字符串索引、一种热编码和分位数离散化等步骤。我的数据框在 100 万行中有很多列(1000 列,包括 500 个间隔列、250 个分类和 250 个二进制文件)。
我的观察是,某些数据转换比其他数据转换慢得多。正如下面的摘要所示,有些步骤甚至持续大约 3 小时,而其他步骤只需要几分钟。
步骤(执行时间):
- 所有区间变量的 Log10 转换 (00:02:22)
- 数据帧的随机数据划分 (00:02:48)
- 区间的分位数离散化和向量组装 ( 02:31:37 )
- 一种用于分类的热编码和向量组装 ( 03:13:51 )
- 二进制文件的字符串索引和向量组装 ( 03:17:34 )
似乎表现最差的步骤是字符串索引、一种热编码、分位数离散化或向量汇编器。
你能建议我在我的 spark 配置或代码中检查或调整什么以显着提高这些步骤的性能吗?
我使用了 Pyspark.ml.feature 中的上述特征工程步骤方法 QuantileDiscretizer、VectorAssembler、OneHotEncoder、StringIndexer。我确信数据已完全上传到集群内存中(persist(StorageLevel.MEMORY_ONLY))。
我的集群包含 7 个节点(每个节点 4 个内核和 16GB RAM)。Spark 版本是 2.2。使用 Pyspark。
应用 Spark 配置:
- spark.serializer = org.apache.spark.serializer.KryoSerializer
- spark.kryo.unsafe = true
- spark.rdd.compress = false
- 主人=纱线
- 部署模式 = 集群
- spark.driver.cores=4
- 驱动内存 = 4G
- 执行者数 = 6
- 执行器内存 = 10G
- 执行器核心 = 4
- spark.yarn.maxAppAttempts=1
- spark.sql.cbo.enabled=true
- spark.sql.constraintPropagation.enabled=false