使用UniformUncertainifier搭配ELKI的UKMeans时遇类型转换错误及Normal分布问题
ELKI UKMeans 类型转换错误及正态分布生成器问题
一、ClassCastException 错误原因与解决方法
你遇到的类型转换错误,核心原因是UKMeans算法仅支持离散型不确定对象,而你当前生成的是连续型不确定对象:
原执行命令:
KDDCLIApplication -dbc.in "E:\User\Downloads\IRIS1.csv" -dbc.filter typeconversions.UncertainifyFilter -uofilter.generator UniformUncertainifier -time -algorithm clustering.uncertain.UKMeans -kmeans.k 3 -uo.uncertainty.max 3.0
错误本质:
UniformUncertainifier生成的是UniformContinuousUncertainObject(基于连续概率密度模型的不确定对象),但UKMeans的实现代码强制要求输入为DiscreteUncertainObject(基于离散样本集的不确定对象),二者属于不同类型体系,无法直接转换。
解决方法:
改用生成离散不确定对象的DiscreteUniformUncertainifier,同时补充离散样本数量的配置参数,修改后的命令示例:
KDDCLIApplication -dbc.in "E:\User\Downloads\IRIS1.csv" -dbc.filter typeconversions.UncertainifyFilter -uofilter.generator uncertain.DiscreteUniformUncertainifier -uofilter.discretesamples 100 -time -algorithm clustering.uncertain.UKMeans -kmeans.k 3 -uo.uncertainty.max 3.0
二、正态分布(Normal)不确定对象生成器位置
ELKI中支持正态分布的连续不确定对象生成器是NormalContinuousUncertainifier,属于elki.data.uncertain.generator包。使用时需指定该生成器,并可配置均值、标准差等参数,示例命令片段:
-uofilter.generator uncertain.NormalContinuousUncertainifier -uofilter.normal.mean 0.0 -uofilter.normal.stddev 1.0
注意:该生成器生成的是连续型不确定对象,无法直接用于UKMeans算法(仅支持离散型),若要配合UKMeans使用,需先将连续不确定对象离散化,或寻找支持连续型的不确定KMeans变种。
内容的提问来源于stack exchange,提问作者Toan
相关产品推荐
相关产品推荐

