数据表示和特征表示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据表示和特征表示相关的知识,希望对你有一定的参考价值。
参考技术A需要同时对包含训练数据和测试数据的数据框调用 get_dummies ,可以确保训练集和测试集中分类变量的表示方式相同。
使用 scikit-learn 的 OnehotEncoder,指定哪些变量是连续的,哪些变量是离散的。也可以将数据框中的数值列转换为字符串。
特征分箱将其划分为多个特征,可以让线性模型在连续的数据上更强大。
对于特定的数据集,如果有充分的理由使用线性模型——比如数据集很大,维度很高,但有些特征与输出关系是非线性的——那么分箱是提高建模能力的好方法。
加入原始特征: 只有一个 x 特征,所以只有一个斜率。因为斜率在所有箱子中是相同的,所以它似乎不是很有用
添加交互特征或乘积特征,用来表示数据点所在箱子以及数据点在 x 轴上的位置。这个特征是箱子指示符与原始特征的乘积。
波士顿房价数据集
大部分模型都在每个特征大致遵循高斯分布时表现最好,也就是说,每个特征的直方图应该具有类似于熟悉的“钟形曲线”的形状。
处理整数计数数据时,计数数据指类似“用户 A 多长时间登陆一次”,计数不可能取负值,并且遵循特定的统计模式。
数据分布的不对称性变小,也不再有非常大的异常值
如何判断每个特征的作用有多大:
计算每个特征和目标值之间的关系是否存在统计显著性,然后选择具有最高置信度的特征。
对分类问题通常是 f_classif (默认值),对回归问题通常是 f_regressioni,然后基于测试中确定的 p 值来选择一种舍弃特征的方法。
用于特征选择的监督模型不需要与用于最终监督建模的模型相同,特征选择模型需要为每个特征提供某种重要性度量,以便用这个度量对特征进行排序。
决策树和基于决策树的模型提供了 feature_importances_ 属性,可以直接编码每个特征的重要性。线性模型系数的绝对值也可以用于表示特征重要性。
在迭代特征选择中,将会构建一系列模型,每个模型都使用不同数量的特征。
递归特征消除(RFE): 从所有特征开始构建模型,并根据模型舍弃最不重要的特征,然后使用除舍弃特征之外的所有特征来构建一个新模型,如此继续,指导剩下预设数量的特征。
1、使用 POSIX 时间特征和随机森林组合,效果不佳,其原因是测试集 POSIX 时间特征的值超出了训练集特征取值的范围。 树以及随机森林无法外推到训练集之外的特征范围。
2、使用一天内的时间和一周的星期几
3、使用线性模型预测,我们用整数编码一周的星期几和一天内的时间,被解释为连续变量。因此需要使用 OneHotEncoder 编码,解释为分类变量,使用 PolynomialFeatures 进行特征组合,让模型为星期几和时刻的每一种组合学到一个系数。
回归分析中的分类和有序特征数据表示?
【中文标题】回归分析中的分类和有序特征数据表示?【英文标题】:Categorical and ordinal feature data representation in regression analysis? 【发布时间】:2016-03-09 07:49:46 【问题描述】:在进行回归分析时,我试图完全理解分类数据和有序数据之间的差异。现在,什么是清楚的:
分类特征和数据示例:
颜色:红、白、黑
为什么要分类:red < white < black
在逻辑上不正确
序数特征和数据示例:
条件:旧的、翻新的、新的
为什么序数:old < renovated < new
在逻辑上是正确
分类到数值和序数到数值的编码方法: 分类数据的 One-Hot 编码 序数数据的任意数
分类数据转数值:
data = 'color': ['blue', 'green', 'green', 'red']
One-Hot 编码后的数值格式:
color_blue color_green color_red
0 1 0 0
1 0 1 0
2 0 1 0
3 0 0 1
序数数据转数值:
data = 'con': ['old', 'new', 'new', 'renovated']
使用映射后的数值格式:Old
0 0
1 2
2 2
3 1
在我的数据中,我有“颜色”功能。随着颜色从白色变为黑色,价格上涨。根据上述规则,我可能必须对分类“颜色”数据使用单热编码。但是为什么我不能使用序数表示。下面我提供了我的观察结果。
让我首先介绍线性回归的公式: 让我们看一下颜色的数据表示: 让我们使用两种数据表示的公式来预测第 1 件和第 2 件商品的价格:单热编码: 在这种情况下,将存在不同颜色的不同 theta。我假设 thetas 已经从回归(20、50 和 100)中得出。预测将是:
Price (1 item) = 0 + 20*1 + 50*0 + 100*0 = 20$ (thetas are assumed for example)
Price (2 item) = 0 + 20*0 + 50*1 + 100*0 = 50$
颜色的序号编码: 在这种情况下,所有颜色都有 1 个共同的 theta,但我分配的乘数(10、20、30)不同:
Price (1 item) = 0 + 20*10 = 200$ (theta assumed for example)
Price (2 item) = 0 + 20*20 = 400$ (theta assumed for example)
在我的模型中,价格为白色
【问题讨论】:
如果你没有得到答案,你可以试试:datascience.stackexchange.com 啊好的谢谢我会试试的。 在 DataScience.SE 和 SO 上交叉发布:datascience.stackexchange.com/q/9202/8560、***.com/q/34087329/781723。请do not post the same question on multiple sites。每个社区都应该诚实地回答问题,而不会浪费任何人的时间。 @HRgiger,以后如果您要推荐另一个网站,请提醒人们不要交叉发布:您可以建议如果他们认为它更适合其他地方,他们应该将其删除并在那里重新发布,但不要在两个 SE 网站上发布。 【参考方案1】:所以无论数据类型(分类或序数)如何,我都可以对回归使用任何编码吗?数据表示的这种划分只是约定和面向软件的表示的问题,而不是回归逻辑本身的问题?
你可以做任何事。问题是什么可能会更好?答案是您应该使用嵌入有关数据结构的正确信息并且不嵌入错误假设的表示。这里是什么意思?
如果您的数据是分类数据并且您使用数字格式,则嵌入 false 结构(因为分类数据没有排序) 如果您的数据是原始数据并且您使用单锄编码,则您不要嵌入真正的结构(因为有一个排序而您忽略它)。那么为什么在你的情况下这两种格式都“有效”?因为您的问题是微不足道的,实际上陈述不正确。您分析预测训练样本的效果如何,事实上,给定一些过拟合模型,无论表示是什么,您总是会在训练数据上获得满分。事实上,你所做的是表明存在使事情正确的 theta。是的,如果存在适用于原始模型的 theta(在线性模型中) - 总会有一个用于 one-hot。问题是 - 您在训练模型时更有可能错过它。这不是面向软件的问题,而是面向学习的问题。
然而,在实践中,这不会发生。一旦您引入实际问题,包含大量数据,这些数据可能是嘈杂的、不确定的等。使用与问题的性质有关的表示(这里 - 原始)用更少的努力获得更好的分数 然后使用不包含它的表示(这里 - 一个热门)。为什么?因为可以从模型的数据中推断(学习)有序的这种知识,但是您需要更多的训练数据才能做到这一点。那么,如果您可以将这些信息直接嵌入到数据结构中从而导致更容易学习的问题,为什么要这样做呢?学习机器学习实际上很困难,不要让它变得更难。另一方面,请始终记住,您必须确保您嵌入的知识确实是真实的,因为可能很难从数据中学习关系,但更难从数据中学习真实的模式虚假关系。
【讨论】:
以上是关于数据表示和特征表示的主要内容,如果未能解决你的问题,请参考以下文章