SKLearn 多分类,无需预先了解 Python 中的分类

Posted

技术标签:

【中文标题】SKLearn 多分类,无需预先了解 Python 中的分类【英文标题】:SKLearn Multi Classification without Knowing the Classifications in Advance Python 【发布时间】:2020-01-18 13:47:27 【问题描述】:

我最近开始使用 SKLearn,尤其是分类模型,并且有更多关于用例示例的问题,而不是停留在任何特定的代码位上,所以如果这不是正确的提问地方,请提前道歉诸如此类的问题。

到目前为止,我一直在使用样本数据,其中基于已分类的数据训练模型。以“鸢尾花”数据集为例,所有数据都归入三个物种之一。但是,如果一个人想要在不知道分类的情况下对数据进行分组/分类怎么办。

让我们来看看这个虚构的数据:

  Name  Feat_1  Feat_2  Feat_3  Feat_4
0    A      12    0.10       0    9734
1    B      76    0.03       1   10024
2    C      97    0.07       1    8188
3    D      32    0.21       1    6420
4    E      45    0.15       0    7723
5    F      61    0.02       1   14987
6    G      25    0.22       0    5290
7    H      49    0.30       0    7107

如果想使用不同的功能将名称分成 4 个单独的分类,这是否可能,需要哪种 SKLearn 模型?我不是要任何代码,如果有人能指出我正确的方向,我完全可以自己研究?到目前为止,我只能找到分类已知的示例。

在上面的示例中,如果我想将数据分成 4 个分类,我希望我的结果是这样的(注意新列,表示类):

  Name  Feat_1  Feat_2  Feat_3  Feat_4  Class
0    A      12    0.10       0    9734      4
1    B      76    0.03       1   10024      1
2    C      97    0.07       1    8188      3
3    D      32    0.21       1    6420      3
4    E      45    0.15       0    7723      2
5    F      61    0.02       1   14987      1
6    G      25    0.22       0    5290      4
7    H      49    0.30       0    7107      4

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以进行 k-mean 聚类,这将在每次迭代中将数据分组到较小的类中,直到所有数据都被分组到 1 个组中。然后你可以在你想要的类数时提前停止迭代,或者你也可以返回已经训练好的模型来获得你想要的类数。例如,要获得 4 个类,当数据聚集在 4 个类中时,您可以后退 4 步

sklearn.cluster.KMeans doc

【讨论】:

【参考方案2】:

分类是一种有监督的方法,这意味着训练数据带有特征和标签。如果你想根据特征对数据进行分组,那么你可以选择一些聚类算法(无监督),例如 sklearn.cluster.KMeans(k = 4)。

【讨论】:

非常感谢您的帮助!【参考方案3】:

从确定集群的无监督方法开始...使用这些集群作为标签。

我建议使用 sklearn 的 GMM 而不是 k-means

https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html

K-means 假设圆形簇。

【讨论】:

谢谢你的朋友,非常感谢你的帮助【参考方案4】:

这个话题叫:unsupervised learning

一些定义是:

无监督学习是一种自组织的 Hebbian 学习,它有助于在数据集中找到以前未知的模式,而无需预先存在标签。它也称为自组织,允许对给定输入的概率密度进行建模。 [1]它是机器学习的三大主要类别之一,与监督学习和强化学习一起。还描述了半监督学习,它是监督和无监督技术的混合体。

那里有很多算法,您需要尝试最适合您的算法的算法,例如:

分层聚类(在 Scipy 中实现:https://en.wikipedia.org/wiki/Single-linkage_clustering) kmeans(在 sklearn 中实现:https://en.wikipedia.org/wiki/K-means_clustering) Dbscan(在 sklearn 中实现:https://en.wikipedia.org/wiki/DBSCAN)

【讨论】:

以上是关于SKLearn 多分类,无需预先了解 Python 中的分类的主要内容,如果未能解决你的问题,请参考以下文章

Python sklearn 多标签分类:用户警告:标签不是 226 存在于所有训练示例中

Python Sklearn“ValueError:分类指标无法处理多类多输出和二进制目标的混合”错误

在sklearn python中处理逻辑回归分类器中的极端不平衡多类

使用 Sklearn 进行多标签文本分类

如何使用 sklearn.metrics 计算多标签分类任务的微观/宏观度量?

python使用sklearn中的MultiLabelBinarizer函数将多标签的分类变量进行独热编码(One-Hot Encode Features With Multiple Labels)