我有 15000 名受试者的年龄、性别、身高、体重和其他一些类似参数。我还有一栏显示他们是否有健康状况(大约 20% 的受试者存在)。我现在想分析对医疗状况影响最大的因素。通常对此的测试是逻辑回归分析。但是,这假设关系是线性的。对于此类数据,我还可以为此目的应用哪些其他机器学习测试?感谢您的洞察力。
逻辑回归的替代方案
如果您选择基于树的模型的替代方案,那么与所有其他线性/逻辑回归等相比,您在此处确实具有优势。
人们通常将Co-relation, Co-variance and heat maps.. etc其用作一个过程,该过程通常会生成比原始数据更多的距离表,但Dendrograms实际上简化了我们对数据的理解。
物体之间的距离可以通过许多简单而令人回味的方式来可视化,其中之一是Hierarchial Clustering..
什么是层次聚类?
层次聚类是您构建一个聚类树(树状图)来表示数据的地方,其中每个组(或“节点”)链接到两个或多个后继组。这些组被嵌套并组织为一棵树,理想情况下最终成为一个有意义的分类方案。
那么现在,什么是树状图?
树状图是一种显示层次聚类的树形图——相似数据集之间的关系。它们在生物学中经常用于显示基因或样本之间的聚类,但它们可以表示任何类型的分组数据。
叶子同一分割下的柱子之间或多或少有一定的关系或具有相似的属性..这就是我们试图探索和加深理解以减少冗余特征....
样本树状图看起来像这个......
所以让我们试着解释一下现在的图表,
删除冗余功能
使变量难以解释的一件事是似乎有些变量具有非常相似的含义(冗余特征......)
让我们尝试删除其中一些相关特征,看看是否可以在不影响准确性的情况下简化模型。
def get_oob(df):
m = RandomForestRegressor(n_estimators=30, min_samples_leaf=5, max_features=0.6, n_jobs=-1, oob_score=True)
x, _ = split_vals(df, n_trn)
m.fit(x, y_train)
return m.oob_score_
这是我们的基线。
get_oob(df_keep)
0.88999425494301454
现在我们尝试一次删除每个变量......
for c in ('saleYear', 'saleElapsed', 'fiModelDesc', 'fiBaseModel', 'Grouser_Tracks', 'Coupler_System'):
print(c, get_oob(df_keep.drop(c, axis=1)))
输出
saleYear 0.889037446375
saleElapsed 0.886210803445
fiModelDesc 0.888540591321
fiBaseModel 0.88893958239
Grouser_Tracks 0.890385236272
Coupler_System 0.889601052658
看起来我们可以尝试从每个组中删除一个。让我们看看它有什么作用。
to_drop = ['saleYear', 'fiBaseModel', 'Grouser_Tracks']
即使在删除了一些列之后看起来也不错....
参考 -:
编辑 - (只是为了使答案完整)
我们在使用 RF 时也有一些称为部分依赖的东西,这也是进一步探索的非常有用的见解......
除了关于机器学习方法的明显想法,例如基于树的方法(例如 xgboost),我会注意到逻辑回归不限于线性效应。例如,可以很容易地应用基于样条的方法(有关更多详细信息,请参见 Frank Harrell 的“回归建模策略 - 应用于线性模型、逻辑和序数回归以及生存分析”)。还有广义的加法模型,这可能是另一种选择。在这样的模型中,解释不同变量的贡献可能比在基于树的方法中更容易,这可能有点困难。
