什么分类 ML 模型可以处理这些数据?

数据挖掘 机器学习
2022-02-19 22:04:48

我一直在尝试为以下类型的数据找出合适的分类模型

    C1      C2       C3             C4          label
R1 [1,4,5]  [3,5,1]  [8,5,1]        [0, NA, 6]  lung
R2 [5,NA,5] [5,1,0]  [0.9, NA, NA]  [0, 0, 0]   lung
R3 [1,1,1]. [9,4,2]  [1,1,5]        [8,1,4]     colon

如您所见,对于每个功能,我都有一系列值,更糟的是,有时是 NA。

如果有人能给我一些关于哪种算法最适合这种类型的分类数据以及我在解释模型结果时应该注意的事情的一些见解,那就太好了。

谢谢并保持安全

2个回答

事实上,分类算法通常需要一个数值才能正确分类。您可以使用将 NaN 替换为平均值或异常值的函数来使用随机森林。

在您的情况下,它可能是 -1 或 -5,但您可以使用一般平均值,以便减少分类过程中 NaN 值的可变性。

from __future__ import print_function

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer


X_train = [[1,4,5,3,5,1,8,5,1,0, NA, 6],....
Y_train = [lung,...
X_test_1 = ...


# Option 1: Create our imputer to replace missing values with the mean e.g.
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp = imp.fit(X_train)
X_train_imp = imp.transform(X_train)

#Option 2:Or replace by an outlier value
X_train_imp = X_train.nan_to_num(-5)

# Then train the classifier
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X_train_imp, Y_train)
    
#Option 1:
X_test_imp = imp.transform(X_test_1)
#Or Option 2
X_test_imp = X_test_1.nan_to_num(-5)

#Result:
print(X_test_1, '->', clf.predict(X_test_imp))

初始源代码:https ://stackoverflow.com/questions/30317119/classifiers-in-scikit-learn-that-handle-nan-null

你可以制作各种模型,

  1. 最简单的可能是分组套索 - 在 R 和 python 中都有多种实现 - 例如这个

你把你的数据变成了

R1 1,4,5,3,5,1, 8,5,1,0, NA, 6, lung
R2 5,NA,5,5,1,0,0.9, NA, NA,0,0,0,lung
R3 1,1,1,9,4,2,1,1,5,8,1,4 colon

并在您的示例中将 group_id 设置为您知道哪些列在一起的位置[1,1,1,2,2,2,3,3,3]

gl = GroupLasso(
    groups=groups,
    group_reg=5,
    l1_reg=0,
    frobenius_lipschitz=True,
    scale_reg="inverse_group_size",
    subsampling_scheme=1,
    supress_warning=True,
    n_iter=1000,
    tol=1e-3,
)
gl.fit(X, y)
  1. 通过贝叶斯框架构建自己的模型 - 它指的是分层贝叶斯模型 - 确保您使用 Stan 更高级别的框架来翻译您想要的内容。这里

  2. 基于深度学习的模型

这篇文章听起来很相似