hiermetriclearn.py 文件源码

python
阅读 41 收藏 0 点赞 0 评论 0

项目:massivedatans 作者: JohannesBuchner 项目源码 文件源码
def cluster(self, u, ndim, keepMetric=False):
        w = self.metric.transform(u)
        prev_region = self.region
        if keepMetric:
            self.region = RadFriendsRegion(members=w)
            if self.force_shrink and self.region.maxdistance > self.prev_maxdistance:
                self.region = RadFriendsRegion(members=w, maxdistance=self.prev_maxdistance)
            self.prev_maxdistance = self.region.maxdistance
            print 'keeping metric, not reclustering.'
            return

        metric_updated = False
        clustermetric = self.metric
        print 'computing distances for clustering...'
        # Overlay all clusters (shift by cluster mean) 
        print 'Metric update ...'
        cluster_mean = numpy.mean(u, axis=0)
        shifted_cluster_members = u - cluster_mean

        # Using original points and new metric, compute RadFriends bootstrapped distance and store
        if self.metriclearner == 'none':
            metric = self.metric # stay with identity matrix
            metric_updated = False
        elif self.metriclearner == 'simplescaling':
            metric = SimpleScaling()
            metric.fit(shifted_cluster_members)
            metric_updated = True
        elif self.metriclearner == 'truncatedscaling':
            metric = TruncatedScaling()
            metric.fit(shifted_cluster_members)
            metric_updated = self.metric == IdentityMetric() or not numpy.all(self.metric.scale == metric.scale)
        else:
            assert False, self.metriclearner

        self.metric = metric

        wnew = self.metric.transform(u)
        print 'Region update ...'

        self.region = RadFriendsRegion(members=wnew) #, maxdistance=shifted_region.maxdistance)
        if not metric_updated and self.force_shrink and self.prev_maxdistance is not None:
            if self.region.maxdistance > self.prev_maxdistance:
                self.region = RadFriendsRegion(members=w, maxdistance=self.prev_maxdistance)
        self.prev_maxdistance = self.region.maxdistance
        print 'done.'
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号