コード例 #1
0
 def cv_train(self, X, Y, regMin=1e-30, regMax=1e+30, K=100):
     patience = 100
     regMinStart = regMin
     regMaxStart = regMax
     BETAs = []
     time_start = time.time()
     time_diffs = []
     minFactor = 1
     maxFactor = 1
     if self.realDataFlag:
         minFactor = 0.75
         maxFactor = 1.25
     for clf in [Lasso()]:  #, MCP(), SCAD()]:
         betaM = None
         regMin = regMinStart
         regMax = regMaxStart
         iteration = 0
         while regMin < regMax and iteration < patience:
             iteration += 1
             reg = np.exp((np.log(regMin) + np.log(regMax)) / 2.0)
             # print("Iter:{}\tlambda:{}".format(iteration, lmbd), end="\t")
             clf.setLambda(reg)
             clf.setLearningRate(self.learningRate)
             clf.fit(X, Y)
             beta = clf.getBeta()
             k = len(np.where(beta != 0)[0])
             if k < minFactor * K:  # Regularizer too strong
                 regMax = reg
                 if betaM is None:
                     betaM = beta
             elif k > maxFactor * K:  # Regularizer too weak
                 regMin = reg
                 betaM = beta
             else:
                 betaM = beta
                 break
         BETAs.append(
             np.abs(betaM)
         )  # make sure this is absolute value for evaluation ROC curve
         time_diffs.append(time.time() - time_start)
         time_start = time.time()
     return BETAs, time_diffs
コード例 #2
0
  #Xtotal,indices=Priberam_Ridge.tira_meta(Xtotal,indices)
  pdb.set_trace()
  trainsize=int(Xtotal.shape[0]*0.8)
  devsize=int(Xtotal.shape[0]*0.1)+trainsize
  Xtotal=Xtotal.tocsc()
  #Xtotal,indices=Priberam_Ridge.repara(Xtotal,indices)
  #train_index=xrange(trainsize)
  #dev_index=xrange(trainsize,devsize)
  #test_index=xrange(devsize,Xtotal.shape[0])
  
  #Xtrain,Ytrain,Xtest,Ytest,Xdev,Ydev=Priberam_Ridge.separaXY(Xtotal,Ytotal)
  vec=sparse.csr_matrix([0 for i in xrange(Xtotal.shape[1])])
  vec=vec.transpose()
 
  Ytotal=Ytotal.tocsc()
  W,F,lamb=Lasso.lasso(Xtotal[:trainsize,:],Ytotal[0:trainsize,0],vec,Xtotal[devsize:,:],Ytotal[devsize:,0],Xtotal[trainsize:devsize,:],Ytotal[trainsize:devsize,0],False,False)
  #W,F,lamb=Lasso.lasso(Xtrain,Ytrain.transpose(),vec,Xdev,Ydev.transpose(),Xtest,Ytest.transpose())
  #print "ERRO:",Rfechado.erro(Xtest,Ytest,W)
  print "ERRO:", Rfechado.erro(Xtotal[trainsize:devsize,:],Ytotal[trainsize:devsize,:],W)
  '''
  for k in  indices:
      if W[indices[k]]==0:
          print k
  '''
  print "PIORES 10"
  for coiso in sorted(np.array(W))[:10]:
      i=0
      while W[i,0] != coiso[0]:
          i+=1
      else:
          for cenas in indices:
import time as t
import matplotlib.pyplot as plt
sys.path.insert(0, '../kode')
import lass_admm as jakob
import Lasso as jonas

n = 10000
p = int(n / 2)

A = np.random.rand(p, n)
x = np.zeros([n, 1])
x[0, 0] = 1
b = A.dot(x)

rho = 1
lamda = 5
maxit = 1000
er = 10**(-9)
es = 10**(-9)

st = t.time()
res_jonas = jonas.lasso(A, b, rho, lamda, maxit, er=er, es=es)
print("Jonas' in:", t.time() - st)
st = t.time()
res_jakob = jakob.lass_admm(A, b, rho, lamda, maxit, er=er, es=es)
print("Jakobs in:", t.time() - st)

plt.stem(res_jonas[0][-1])
plt.figure(2)
plt.stem(res_jakob[0][-1])
plt.show()
コード例 #4
0
 def train_lasso(self, X, y):  #, mu):
     lasso = Lasso()
     lasso.fit(X, y)
     return lasso.getBeta()
コード例 #5
0
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LassoCV

hitters = pd.read_csv('Hitters.csv')
hitters = hitters.dropna()
hitters.head(5)

X = hitters.drop('Salary',
                 axis=1)  # Axis denotes either the rows (0) or the columns (1)
y = hitters.Salary

X = pd.get_dummies(X, drop_first=True)

scaler = StandardScaler()
X = scaler.fit_transform(X)
y = np.array(y - np.mean(y))

print("Running Lasso Regression with Coordinate Descent..")
# Running Fast Gradient Descent
beta_init = np.zeros(np.size(X, 1))
max_iter = 1000
betas_cyclic = Lasso.cycliccoorddescent(beta_init, X, y, 1, max_iter)
print('Optimal beta from cyclic coordinate descent:\n', betas_cyclic[-1, :])

print("\n\n\nRunning sklearn's version of lasso regression")
lasso = LassoCV(fit_intercept=False).fit(X, y)
lambda_opt = lasso.alpha_ * 2  # Note scikit-learn's objective function is different from ours
beta_star = lasso.coef_

print("Coefficient Values using sklearn = ", beta_star)
コード例 #6
0
w3=[]
w4=[]
lambs=[0.1,1,10,10e2,10e3,10e4,10e5,10e6,10e7,10e8,10e9,10e10,10e11]
xg=[np.log10(x) for x in lambs]
'''
for  lamb in lambs:
    w_estimado,yy3,xx3=grad.grad(Xtotal,Ytotal,vec,Xtotal,Ytotal,Xtotal,Ytotal,max_iter,lamb)
    w0.append(w_estimado.todense()[0,0])
    w1.append(w_estimado.todense()[1,0])
    w2.append(w_estimado.todense()[2,0])
    w3.append(w_estimado.todense()[3,0])
    w4.append(w_estimado.todense()[4,0])
    print w_estimado
'''
for  lamb in lambs:
    w_estimado,yy3,xx3=lasso.lasso(Xtotal,Ytotal,vec,Xtotal,Ytotal,Xtotal,Ytotal,max_iter,lamb)
    w0.append(w_estimado[0,0])
    w1.append(w_estimado[1,0])
    w2.append(w_estimado[2,0])
    w3.append(w_estimado[3,0])
    w4.append(w_estimado[4,0])
    print w_estimado

import pylab
import matplotlib.pyplot as plt
plt.figure(1)
'''
plt.title("Comparacao entre os 3 metodos")
plt.plot(xx1,yy1,"b",xx2,yy2,"g",xx3,yy3,"r",xx1,[custo for cenas in xrange(len(xx1))],"k--")
pylab.ylim([custo-1e14,custo+4e14])
plt.show()
コード例 #7
0
    10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800,
    900, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000
]
for n in logspace:
    print("n:", n)
    time_opt_temp = 0
    time_non_temp = 0
    it_opt_temp = 0
    it_non_temp = 0
    for i in range(q):
        A = np.random.rand(int(n / 2), n)  # Creation of random matrix
        x = np.zeros([n, 1])  # Creation og wanted solution x
        x[0, 0] = 1
        b = A.dot(x)  # Resulting vector b

        res_optimal = lasso.lasso(A, b, rho, lamda, maxit, er=er, es=es)
        #res_nonoptimal = l1.l1_admm_nonoptimized(A,b,rho,maxit,er =er,es = es,quiet = True)
        time_opt_temp += res_optimal[5]
        #time_non_temp += res_nonoptimal[5]
        it_opt_temp += res_optimal[6]
        #it_non_temp += res_nonoptimal[6]

    time_opt.append(time_opt_temp / q)
    it_opt.append(it_opt_temp / q)
    #time_non.append(time_non_temp/q)
    #it_non.append(it_non_temp/q)
    count = len(time_opt)
    data = np.array([logspace[:count], time_opt, it_opt])
    np.save('data/Avg_iteration_time_lasso.npy', data)

fig, ax1 = plt.subplots()