def gmmEM(data, K, it,show=False,usekmeans=True): #data += finfo(float128).eps*100 centroid = kmeans2(data, K)[0] if usekmeans else ((max(data) - min(data))*random_sample((K,data.shape[1])) + min(data)) N = data.shape[0] gmm = GaussianMM(centroid) if show: gmm.draw(data) while it > 0: print it," iterations remaining" it = it - 1 # e-step gausses = zeros((K, N), dtype = data.dtype) for k in range(0, K): gausses[k] = gmm.c[k]*mulnormpdf(data, gmm.mean[k], gmm.covm[k]) sums = sum(gausses, axis=0) if count_nonzero(sums) != sums.size: raise "Divide by Zero" gausses /= sums # m step sg = sum(gausses, axis=1) if count_nonzero(sg) != sg.size: raise "Divide by Zero" gmm.c = ones(sg.shape) / N * sg for k in range(0, K): gmm.mean[k] = sum(data * gausses[k].reshape((-1,1)), axis=0) / sg[k] d = data - gmm.mean[k] d1 = d.transpose()*gausses[k] gmm.covm[k]=dot(d1,d)/sg[k] if show: gmm.draw(data) return gmm
def simulate_buy_and_hold(df_day_gain, df_analyzed): df_buy_and_hold = df_day_gain.copy() for row_index, row in df_buy_and_hold.iterrows(): analyzed_row = df_analyzed.loc[row_index] number_of_invested = count_nonzero(analyzed_row) money_invested = previous_row.sum( ) if row_index != df_buy_and_hold.index[0] else 1 for key, value in row.iteritems(): if row_index == df_buy_and_hold.index[0]: row[key] = money_invested / \ number_of_invested if analyzed_row[key] else 0 else: if previous_row_invested == number_of_invested: row[key] = (1 + value) * \ previous_row[key] if analyzed_row[key] else 0 else: row[key] = (1 + value) * ( money_invested / number_of_invested) if analyzed_row[key] else 0 previous_row = row previous_row_invested = number_of_invested return df_buy_and_hold
def calculateMisclassificationRate(ours, real): return 1.0 - count_nonzero(ours + real)*1.0 / ours.size
def checkClassification(self,binary): fp = count_nonzero(logical_and(self.notMask, binary)) tp = count_nonzero(logical_and(self.mask,binary)) return fp,tp
def __init__(self,fileName): self.mask = imread(fileName) > 0 self.notMask = logical_not(self.mask) self.positives = count_nonzero(self.mask)*1.0 self.negatives = (self.mask.size - self.positives)*1.0