我有一个数据集.该集合的每个元素由数字和分类变量组成.分类变量是名义上的和有序的.该数据集中有一些自然结构.通常,专家使用他们的"专家知识"对我的数据集进行聚类,但我希望自动化这个聚类过程.
大多数聚类算法使用对象之间的距离(Euclidean,Mahalanobdis等)将它们分组.但很难找到混合数据类型的一些合理指标,即我们找不到"玻璃"和"钢铁"之间的距离.所以我得出结论,我必须使用条件概率 P(feature = 'something' | Class)和一些依赖于它们的效用函数.对于分类变量是合理的,并且假设它们正常分布,它对数值变量很好.
所以我很清楚像K-means这样的算法不会产生好的结果.
这时我尝试使用COBWEB算法,这完全符合我使用条件概率的想法.但是我遇到了另一个障碍:如果不是不可能的话,聚类的结果很难解释.因此,我希望获得类似于描述每个聚类(例如if feature1 = 'a' and feature2 in [30, 60], it is cluster1)的一组规则,例如用于分类的决策树.
所以,我的问题是:
是否存在适用于混合数据类型的现有聚类算法,并产生可理解的(对于人类而言合理的)聚类描述.
附加信息:
据我所知,我的任务是在概念聚类领域.由于研究领域的原因,我不能像它所建议的那样定义一个相似性函数(它作为呐喊项目的最终目标) - 它在形式化方面非常复杂和无情.据我所知,最合理的方法是COBWEB中使用的方法,但我不确定如何调整它,所以我可以得到一个不可靠的集群描述.
决策树
正如建议的那样,我尝试在聚类输出上训练决策树,从而将聚类描述作为一组规则.但不幸的是,对这个规则的解释几乎和原始聚类输出一样难.根节点中只有少数第一级规则确实没有任何意义:更接近叶子 - 我们没有意义.其次,这些规则与任何专业知识都不相符.
所以,我得出的结论是聚类是一个黑盒子,不值得尝试解释它的结果.
也
我有一个有趣的想法是以某种方式修改"回归决策树"算法:而不是计算组内方差,计算类别效用函数并将其用作拆分标准.因此,我们应该有一个带有叶子集群和集群描述的决策树.但我没有尝试这样做,我不确定准确性和其他一切.
algorithm computer-science cluster-analysis machine-learning data-mining
我有一个页面,其中包含许多根据用户操作生成的服务器端图像.当图像加载成功时,我很高兴,但是当服务器上出现错误时,我必须根据发生的错误采取行动.
例如:
等等.
所以,我的问题是:有没有办法在"img"标签的错误事件处理程序中获取状态代码?
请考虑以下查询:
SELECT DATE_TRUNC('hour', date_range)
FROM GENERATE_SERIES(:start_date, :end_date, :interval) as date_range
Run Code Online (Sandbox Code Playgroud)
是否可以GENERATE_SERIES(...)用作表(数据源)?理想情况下,它看起来像这样:
t = series(start, end, as: 'date_range')
dt = Arel::Nodes::NamedFunction.new('DATE_TRUNC', ['hour', t[:date_range]])
t.project(dt)
Run Code Online (Sandbox Code Playgroud)
Upd1.我为什么需要GENERATE_SERIES?我有一些数据需要处理这个数据可用的时间戳,并将其输出为2D图.作为一个简单的例子,考虑a clickstream=(id,created_at).我想绘制在特定日期之前针对给定日期时间网格(即Nov 17, Nov 18, Nov 19, ..., Nov 30)进行的多次点击.事情是我希望这一切都发生在PostgreSQL中.
Upd2.没有变量的示例查询可能如下所示:
SELECT DATE_TRUNC('hour', date_range) FROM GENERATE_SERIES('2015-01-01 00:15:38'::TIMESTAMP, '2015-01-10 23:59:59'::TIMESTAMP, '1 HOUR') as date_range;
Run Code Online (Sandbox Code Playgroud) 我有一个numpy 2d数组A和一个行号列表row_set.我如何获得新的数组B,如if row_set = [0, 2, 5],那么B = [A_row[0], A_row[2], A_row[5]]?
我想到了这样的事情:
def slice_matrix(A, row_set):
slice = array([row for row in A if row_num in row_set])
Run Code Online (Sandbox Code Playgroud)
但我不知道,我怎么能得到一个row_num.
考虑这段代码(这是一种类型安全的单位):
abstract class UnitsZone {
type ConcreteUnit <: AbstractUnit
abstract class AbstractUnit(val qty: Int) {
SOME_ABSTRACT_MEMBERS
def +(that: ConcreteUnit): ConcreteUnit = POINT_OF_INTEREST.apply(this.qty + that.qty)
def apply(param: Int) = SOME_IMPLEMENTATION
}
def apply(qty: Int): ConcreteUnit
}
object Imperial extends UnitsZone {
type ConcreteUnit = Pound
class Pound(override val qty: Int) extends AbstractUnit(qty) {
CONCRETE_MEMBERS_HERE
}
def apply(qty: Int) = new Pound(qty)
}
Run Code Online (Sandbox Code Playgroud)
为了使整个事情有效,我需要调用apply外部对象的继承方法(在上面的代码中标记为POINT_OF_INTEREST).考虑到这一点,我敢问几个问题:
algorithm ×1
arel ×1
arrays ×1
data-mining ×1
image ×1
inheritance ×1
javascript ×1
numpy ×1
python ×1
ruby ×1
scala ×1
slice ×1