def backstepwise(data, out, k): feature_num = len(data[0]) index_array = [i for i in range(feature_num)] droper = feature_num - k for i in range(droper): beta = leastsquare.ls(data[:,np.array(index_array)], out) yhat = leastsquare.predict(data[:,np.array(index_array)], beta) theg2 = leastsquare.thegama2(yhat, out, len(index_array)) z = leastsquare.z_score(beta, np.sqrt(theg2), data[:,np.array(index_array)]) min_z = 999999999. min_idx = None for j in range(len(z)): if z[j] < min_z: min_z = z[j] min_idx = j index_array.remove(index_array[min_idx]) beta = leastsquare.ls(data[:,np.array(index_array)], out) return beta, index_array
def stepwise(data, out, k): feature_num = len(data[0]) index_array = [0] indexs = [i for i in range(1,feature_num)] #beta = leastsquare.ls(data[:,np.array(index_array)], out) min_beta = None min_idx =None for i in range(1,k): min_rss = 999999999 for idx in indexs: ia = index_array + [idx] beta = leastsquare.ls(data[:,ia], out) rss = RSS(data[:,ia], out, beta) if rss < min_rss: min_rss = rss min_beta = beta min_idx = idx index_array.append(min_idx) indexs.remove(min_idx) return min_beta, index_array