Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2014 16:39:09

vladimircape
Зарегистрирован: 2014-08-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

Добрый день, не нашёл куда написать решил здесь
Кто подскажет в чём ошибка вычислений.
Получаю результаты но не те, правильные результаты получены на другой программе, и от других людей
Должно быть

theta = [
 1.273005, 
 0.624876,
 1.177376,
 -2.020142, 
 -0.912616,
 -1.429907, 
 0.125668, 
 -0.368551, 
 -0.360033,
 -0.171068, 
 -1.460894, 
 -0.052499, 
 -0.618889, 
 -0.273745, 
 -1.192301, 
 -0.240993, 
 -0.207934, 
 -0.047224, 
 -0.278327, 
 -0.296602, 
 -0.453957, 
 -1.045511, 
 0.026463, 
 -0.294330, 
 0.014381,
 -0.328703, 
 -0.143796,
 -0.924883,
]

а вот сам код который перебирает значения, и ни одного близкого похожего
from numpy import *
from scipy.optimize import fmin_bfgs
from pylab import scatter, show, legend, xlabel, ylabel, contour, title
def sigmoid(X):
	den = 1.0 + e ** (-1.0 * X) 
	d = 1.0 / den	 
	return d
def compute_cost(theta,X,y, lambd): 
    m = X.shape[0]   	
    theta = reshape(theta,(len(theta),1))         
    h = sigmoid(X.dot(theta))    
    thetaR = theta[1:, 0]        
    J = -1.0 / m * (dot(y.transpose(), log(h)) + dot(1 - y.transpose(), log(1 - h)))
    J += lambd / (2 * m) * sum(theta[1 : :] ** 2)        
    return J.flatten()
def grad(theta, X, y,lambd):
    m = X.shape[0]   	
    p_1 = sigmoid(dot(X, theta))
    error = p_1 - y 
    grad = dot(error, X) / y.size # gradient vector    
    return grad	
def grad2(theta, X, y,lambd):
    m = X.shape[0]   	
    x_bias = hstack((ones((m, 1)), X))    
    theta = atleast_2d(theta).transpose()         
    theta = [0] * (X.shape[1] + 1)    
    p_1 = sigmoid(dot(x_bias, theta))
    error = p_1 - y
    grad = 1.0 / m * (dot(x_bias.transpose(), error))   	    
    #grad[1 : :] += lambd / m * theta[1 : :]    
    return grad	
def grad3(theta, X1, y,lambd):
    h = sigmoid(X1.dot(theta))
    delta = h - y
    sumdelta = delta.T.dot(X1[:, 1])
    grad1 = (1.0 / m) * sumdelta        
    XR = X1[:, 1:X1.shape[1]]
    sumdelta = delta.T.dot(XR)
    #thetaR = theta[1:, 0]    
    thetaR = theta[1:]     	
    grad = (1.0 / m) * (sumdelta + lambd * thetaR) 
    #out = zeros(shape=(grad.shape[0], grad.shape[1] + 1))
    out = zeros(shape=(grad.shape[0]+1))    
    out[1:] = grad        
    out[0] = lambd / m * theta[:1]#grad1    
    #return out.T.flatten()
    return out
def grad4(theta, x2, y,lambd):    
    x_bias = hstack((ones((m, 1)), x2))
    theta = atleast_2d(theta).transpose()
    grad = 1.0 / m * (dot(x_bias.transpose(), sigmoid(dot(x_bias, theta)) - y))
    grad[1 : :] += lambd / m * theta[1 : :]
    return grad.ravel()	
def grad5(theta, X1, y,lambd):
    h = sigmoid(X1.dot(theta))
    delta = h - y
    #XR = X1[:, 1:X1.shape[1]]
    XR = X1
    sumdelta = delta.T.dot(XR)
    grad = (1.0 / m) * (sumdelta + lambd * theta)     
    out = zeros(shape=(grad.shape[0]+1))    
    out = grad        
    out[1:] += lambd / m * theta[:1]#grad1    
    #return out.T.flatten()
    return out
def grad6(theta2, X1, y,lamb):
    #x_bias = hstack((ones((m, 1)), x))    
    grad = 1.0 / m * (dot(X1.transpose(), sigmoid(dot(X1, theta2)) - y))
    grad[1::] += lamb / m * theta2[1::]    
    return grad.ravel()	
    #return grad
def map_feature(x1, x2):
    x1.shape = (x1.size, 1)
    x2.shape = (x2.size, 1)
    degree = 6    
    out = ones(shape=(x1[:, 0].size, 1))	  
    for i in range(1, degree + 1):
        for j in range(i + 1):
            r = (x1 ** (i - j)) * (x2 ** j)
            out = hstack((out, r))    
    return out
data = loadtxt('ex2data2.txt', delimiter=',')
x = data[:, 0:2]
y = data[:, 2]
x = map_feature(x[:, 0], x[:, 1])
m = x.shape[0]
initial_theta = zeros(shape=(x.shape[1], 1)) 
C_candidates = [0, 0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30]
for C in C_candidates:
    args = (x,y,C)
    theta = fmin_bfgs(compute_cost, initial_theta,grad6, args, maxiter=400)
    thetaT=atleast_2d(theta).transpose()
    print (thetaT)
есть подозрения что градиент не правильно считается, но я уже много чего пересмотрел.

Прикреплённый файлы:
attachment ex2data2.txt (2,2 KБ)

Офлайн

#3 Сен. 13, 2014 21:19:13

vladimircape
Зарегистрирован: 2014-08-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

Офлайн

#4 Сен. 13, 2014 21:38:14

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

vladimircape
Спасибо это я знаю, но я хочу именно так реализовать, без сторонних решений

Ну смотрите как Вам лучше. Помоему, если задача состоит в том чтобы подобрать результат, то что-то вроде этого будет проще.

>>> from sklearn import linear_model
>>> import numpy as np
>>> data = np.loadtxt('ex2data2.txt', delimiter=',')
>>> x = data[:, 0: 2]
>>> y = data[:, 2]
>>>
>>> def map_feature(x1, x2):
...     x1.shape = (x1.size, 1)
...     x2.shape = (x2.size, 1)
...     degree = 6
...     out = np.ones(shape=(x1[:, 0].size, 1))
...     for i in range(1, degree + 1):
...         for j in range(i + 1):
...             r = (x1 ** (i - j)) * (x2 ** j)
...             out = np.hstack((out, r))
...
...
...     return out
...
>>> x = map_feature(x[:, 0], x[:, 1])
>>> r = linear_model.LogisticRegression(C=7.87)
>>> r.fit(x, y).coef_.transpose()
array([[ 1.27527008],
       [ 1.67667301],
       [ 2.73909281],
       [-3.92749475],
       [-3.04555774],
       [-3.77871683],
       [ 0.66911772],
       [-1.02492058],
       [-0.54455106],
       [-0.40115601],
       [-3.08416556],
       [ 0.39068965],
       [-1.63244448],
       [-1.06671461],
       [-2.59803018],
       [-0.5532881 ],
       [-0.45571055],
       [ 0.44930121],
       [-0.99660016],
       [-1.06673074],
       [-0.21340722],
       [-2.43662735],
       [ 0.37429854],
       [-0.70248633],
       [ 0.33342375],
       [-1.02206424],
       [-0.80371194],
       [-1.23544215]])

Отредактировано Alen (Сен. 13, 2014 22:19:13)

Офлайн

#5 Сен. 14, 2014 20:40:53

vladimircape
Зарегистрирован: 2014-08-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

Alen
Спасибо за советы, воспользуюсь вашим решением, может поможет найти ошибку

Офлайн

#6 Сен. 15, 2014 01:19:16

vladimircape
Зарегистрирован: 2014-08-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

Очень странно но fming_bs от Питона, дал лучший прогноз 88% чем fmin от октаве

Офлайн

#7 Сен. 25, 2014 06:14:39

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Логистическая регрессия с нормализаци

есть еще момент с округлением, попробуй заюзать decim. Только есть момент со скоростью обработки, он тормозит.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version