0

私は、Pythonでロジスティック勾配ディセントを実装するチュートリアルに従ってきました。ここ
はリンクです: http://www.johnwittenauer.net/machine-learning-exercises-in-python-part-3/

ここで、このespecific運動のための彼のipythonノートgithubの:
https://github.com/jdwittenauer/ipython-notebooks/blob/master/notebooks/ml/ML-Exercise2.ipynb

ここでは、この問題のために私のコードです:
ここロジスティック勾配Pythonで収束しない降下fmin_tnc

import pandas as pd 
import matplotlib.pylab as plt 
import numpy as np 
import scipy.optimize as opt 


def sigmoid(Z): 
    '''Compute the sigmoid function ''' 
    return 1.0/(1.0 + np.exp(-1.0 * Z)) 

########################################### 


def compute_cost(theta,X,y, learningRate): 
    '''compute cost given ''' 

    theta = np.matrix(theta) 
    X = np.matrix(X) 
    y = np.matrix(y) 
    m = y.size 
    theta0 = np.zeros((1,X.shape[1])) 
    theta0[0,1:] = theta[0,1:]  

    reg = np.dot((learningRate/2*m),(theta0.T.dot(theta0))) 

    Z = X.dot(theta.T) 

    hypothesis = sigmoid(Z) 
    exp1 = (-y.T.dot(np.log(hypothesis))) 
    exp2 = ((1.0 - y).T.dot(np.log(1.0 - hypothesis)))  
    J = (exp1 - exp2).dot(1/m) 

    return J.sum() + reg.sum() 



def grad(theta,X,y,learningRate):  

    theta = theta.T   
    X = np.matrix(X) 
    y = np.matrix(y) 
    m = y.shape[0] 
    theta0 = np.zeros(X.shape[1])  
    theta0[1:] = theta[1:]  
    theta = np.matrix(theta)  
    theta0 = np.matrix(theta0) 

    reg = np.dot(learningRate/m, theta) 

    Z = X.dot(theta.T)  
    hypothesis = sigmoid(Z)  
    error = hypothesis - y   
    grad = np.dot((X.T.dot(error).flatten()),1/m) + reg 
    grad= grad.flatten() 
    grad   

## 
def predict(theta, X):  
    probability = sigmoid(X * theta.T) 
    return [1 if (x >= 0.5) else 0 for x in probability] 


コードの呼び出し方法は次のとおりです。
DATA2 = pd.read_csv( 'ex2data2.txt'、ヘッダ=なし、名前= [ 'テスト1'、 '試験2'、 '受理'])一つの変数すべてが、うまく働いたため

y = data2[data2.columns[-1]].as_matrix() 
m = len(y) 
y = y.reshape(m, 1) 
X = data2[data2.columns[:-1]] 
X = X.as_matrix() 
_lambda = 1 

from sklearn.preprocessing import PolynomialFeatures 

#Get all high order parameters 
feature_mapper = PolynomialFeatures(degree=6) 
X = feature_mapper.fit_transform(X) 

# convert to numpy arrays and initalize the parameter array theta 

theta = np.zeros(X.shape[1]) 

learningRate = 1 

compute_cost(theta, X, y, learningRate)   

result = opt.fmin_tnc(func=compute_cost,x0=theta,fprime=grad,args= (X,y,learningRate)) 

しかしより多くの機能(練習2)ではうまく機能しませんでした。オプティマイズされた勾配降下関数(fmin_tnc)が使用されるまではすべて、まったく同じでした。
何とか彼のコードさえ、期待値に収束しません。彼はそれがfmin_tnc
his call and expected result for fmin_tnc

の結果になるはずだったものを示す彼のブログの例です。しかし、あなたが彼のコードのすべてのステップに従うならば、あなたは次のような結果を得る:あなたができるよう、
Result giving by his code


まあをそれは少し異なって見てください。しかし、私は彼のコードで別のものを見つけました。彼は2列の「テスト1」と「テスト2」を落とし、高次のパラメータだけを残しました。 Andrew Ngのソリューションでは、テーブルのどの列もドロップしないので、28の機能を使用するので、これは奇妙に感じます。これは、11の機能のみを使用します。私は他のコードを見つけました。私はcost_functionとgradient関数を動作させたかったのです。私は彼らが地元の最低限のところで立ち往生していて、彼らが収斂していないと信じています。
私の最終的な試みは、AndrewのdataFrameとまったく同じように、28個の機能すべてで行いました。あなたは以下を参照することができますよう悲しいことに私は別の結果を持っている:
FInal Result
あなたが見ることができるように、私はより高い精度を持っているが、私のコストが予想よりも高いままであり、これは:0.52900
マイブログのコード品質を低下させることではありません。私はまだ他のチュートリアルの手順に従っており、良い出典と思われます。
以下は私のコードへのリンクです。私はfmin_tncを使用しています。私はよりベクトル化されたgradient_functionを作成しました。 https://github.com/vinipachecov/Machine-Learning/tree/master/Logistic%20Regression

答えて

0

問題は、私のpython 3.6を使用していたし、autorはPythonの2.7.X.を使用していたということです。ファイルの名前は、ロジスティック回帰Regularized.py

GithubにありますバージョンをPython 2.7.13に変更すると、この問題は解決しました。

関連する問題