J'ai essayé d'implémenter la régression logistique de Cousera en Python

Cousera - J'ai mis en œuvre la régression logistique de la semaine d'apprentissage automatique du Dr Andrew Ng3. J'ai essayé d'utiliser uniquement numpy autant que possible.

La magie coutumière.

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

Lisez les données et tracez-les.

def plotData(data):
    neg = data[:,2] == 0
    pos = data[:,2] == 1

    plt.scatter(data[pos][:,0], data[pos][:,1], marker='+', c='k', s=60, linewidth=2)
    plt.scatter(data[neg][:,0], data[neg][:,1], c='y', s=60)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend(frameon= True, fancybox = True)
    plt.show()


data = np.loadtxt('ex2data1.txt', delimiter=',')
plotData(data)

https://diveintocode.gyazo.com/80f1b66e71c83968be637cc4fffb119b

Ensuite, implémentation de la fonction de coût et de la fonction sigmoïde

h_θ(x)=g(θ^Tx)
g(z)= \frac{1}{1+e^{-z}}

Fonction Sigmaid

j(θ)= \frac{1}{m}(log(g(Xθ))^Ty+(log(1-g(Xθ))^T(1-y)))

Fonction de coût

def sigmoid(z):
    return(1 / (1 + np.exp(-z)))

def CostFunction(theta, X, y):
    m = len(y)
    h = sigmoid(X.dot(theta))
    
    j = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y))
    
    return j
    
    

Regardons le premier coût.

X = np.c_[np.ones((data.shape[0],1)), data[:,0:2]]
y = np.c_[data[:,2]]

initial_theta = np.zeros(X.shape[1])
cost = CostFunction(initial_theta, X, y)
print(cost)

https://diveintocode.gyazo.com/b77db964bc493df3d34773a0de4d2f29

Le coût est comme ça. Vient ensuite la mise en œuvre de la méthode de descente la plus raide.

def gradient_decent (theta, X, y, alpha = 0.001, num_iters = 100000):
    m = len(y)
    history = np.zeros(num_iters)
    
    for inter in np.arange(num_iters):
        h = sigmoid(X.dot(theta))
        theta = theta - alpha *(1/m)*(X.T.dot(h-y))
        history[inter] = CostFunction(theta,X,y)

    return(theta, history)
    
initial_theta = np.zeros(X.shape[1])
theta = initial_theta.reshape(-1,1)
cost = CostFunction(initial_theta,X,y)
theta, Cost_h= gradient_decent(theta, X, y)

print(theta)
plt.plot(Cost_h)
plt.ylabel('Cost_h')
plt.xlabel('interation')
plt.show()

Le résultat de son exécution est le suivant.

https://diveintocode.gyazo.com/e177f7b75ceffe2d461a017df96d856c

Pour une raison quelconque, cela donne de meilleurs résultats que de définir num_iters sur 10000000. Voyons le résultat.

def predict(theta, X, threshold = 0.5):
    p = sigmoid(X.dot(theta)) >= threshold
    
    return(p.astype('int'))

p = predict(theta,X)
y = y.astype('int')

accuracy_cnt = 0
for i in range(len(y)):
    if p[i,0] == y[i,0]:
        accuracy_cnt +=1

print(accuracy_cnt/len(y) * 100)
    

L'exécution du code ci-dessus vous donnera 91,0%. Et si vous exécutez num_inter à 1000000? ..

https://diveintocode.gyazo.com/0ee6bb360d9c5d4960db54189f677fa3

Si vous vérifiez cette précision, elle sera de 89,0%. On ne sait pas pourquoi les résultats ci-dessus sont pires, malgré les coûts inférieurs.

référence

https://github.com/JWarmenhoven/Coursera-Machine-Learning

Recommended Posts

J'ai essayé d'implémenter la régression logistique de Cousera en Python
Distribution logistique en Python
Implémentation de Shiritori en Python
Analyse de régression avec Python
J'ai essayé d'implémenter la fonction gamma inverse en python
J'ai essayé d'implémenter la recherche de priorité de largeur avec python (file d'attente, dessin personnalisé)
Expression de régression multiple en Python
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Implémentation de Supreme Solver dans Python 3
Analyse de régression simple avec Python
Je comprends Python en japonais!
Régression linéaire en ligne en Python
Ce que j'ai appris en Python
J'ai implémenté une commande de remplacement de type Vim dans Slackbot #Python
2. Analyse multivariée expliquée dans Python 5-3. Analyse de régression logistique (modèles statistiques)
J'ai essayé d'implémenter l'algorithme de calcul séquentiel non biaisé de Donald Knuth en Python
Implémentation de la segmentation d'image en python (Union-Find)
[Python] J'ai essayé d'implémenter un échantillonnage de Gibbs marginalisé
Règles d'apprentissage Widrow-Hoff implémentées en Python
J'ai écrit Fizz Buzz en Python
Implémentation de la méthode de propagation d'étiquettes en Python
J'ai essayé d'étudier le processus avec Python
Scikit-learn ne peut pas être installé en Python
J'ai écrit la file d'attente en Python
Implémentation des règles d'apprentissage Perceptron en Python
Analyse de régression logistique Self-made avec python
J'ai essayé la notification de ligne en Python
Implémenté en 1 minute! LINE Notify en Python
J'ai écrit la pile en Python
Retour logistique
Retour logistique
J'ai mis Python 2.7 dans Sakura VPS 1 Go.
J'ai essayé d'implémenter PLSA en Python
PRML Chapitre 4 Implémentation Python de la régression logistique bayésienne
Régression linéaire en Python (statmodels, scikit-learn, PyMC3)
Un client HTTP simple implémenté en Python
J'ai essayé d'implémenter la permutation en Python
J'ai fait un programme de gestion de la paie en Python!
Régression linéaire en ligne en Python (estimation robuste)
Implémenté en Python PRML Chapitre 7 SVM non linéaire
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Je ne peux pas déboguer les scripts python dans Eclipse
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
Implémenté dans Python PRML Chapter 5 Neural Network
J'ai cherché un nombre premier avec python
Mise en œuvre du tri Stuge dans Python 3 (tri à bulles et tri rapide)
Implémenté en Python PRML Chapitre 1 Estimation bayésienne
J'ai créé un outil de mot de passe en Python.
CheckIO (Python)> Éléments non uniques> J'ai essayé de mettre en œuvre
Implémentation de DQN avec TensorFlow (je voulais ...)
Pourquoi ne puis-je pas installer matplotlib avec python! !!
J'ai essayé d'implémenter la régression linéaire bayésienne par échantillonnage de Gibbs en python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python