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.metrics 计算多标签分类任务的微观/宏观度量?
python使用sklearn中的MultiLabelBinarizer函数将多标签的分类变量进行独热编码(One-Hot Encode Features With Multiple Labels)