2016-12-24 4 views
0

Ich habe gerade mit maschinellem Lernen begonnen, habe einige Stunden damit verbracht, lineare Regression zu lernen. Basierend auf meinem Verständnis habe ich es von Grund auf in Python (Code unten) ohne Regularisierung implementiert. Ist meine Logik korrekt oder braucht sie Verbesserungen?Überprüfen der Implementierung der linearen Regression mit Python

import numpy as np 
import matplotlib.pyplot as plt 


# Assigning X and y from the dataset 
data = np.loadtxt('ex1data1.txt', delimiter=',') 
rows=(data.size)/2 
X = np.array((data[:, 0])).reshape(rows, 1) 
y = np.array(data[:, 1]).reshape(rows, 1) 
m = np.size(X) 
X = np.insert(X, 0, values=1, axis=1) 
t = np.ones(shape=[2, 1]) 

def linReg(): 
    h = np.dot(X,t) 
    J = 1/(2*m) * sum((h - y)**2) 
    print('Cost:',J) 
    print("Error:",h-y) 
    for i in range(1,2000): 
     h = np.dot(X,t) 
     t[0] = t[0] - 0.01*(1/m)*(np.dot((X[:,0]),(h-y))) 
     t[1] = t[1] - 0.01*(1/m)*(np.dot((X[:,1]),(h-y))) 
     J = 1/(2*m) * sum((h - y)**2) 
     print(i) 
     print('Cost:', J) 

    plt.scatter(X[:,1],y,color= 'blue') 
    plt.plot(X[:,1],h) 
    return t 

def predict(newval): 
    W = linReg() 
    predValue = np.dot(newval,W[1]) + W[0] 
    print("Predicted Value:-",predValue) 
    plt.plot(newval, predValue) 
    plt.scatter(newval, predValue, color='red') 
    plt.xlim(0, 40) 
    plt.ylim(0, 40) 
    plt.show() 

print("Enter the number to be predicted:-") 
nv = input() 
nv = float(nv) 
predict(nv) 

Antwort

0

Ihr Modell zu überprüfen, eine einfache Sache zu zu tun wäre, teilen Sie Ihre Daten in einen Trainingssatz und ein Testset. Der Trainingssatz verwendet wird, um das Modell, paßt, indem sie als Argument an die linReg Funktion übergeben werden und die Funktionen des Testsatzes für Vorhersage (mit dem sogenannten predict-Funktion) verwendet.

Sie erhalten dann eine dritte Funktion müssen Ihr Modell punkten, indem durch die Daten, die Vorhersagen mit den tatsächlichen Werten gegeben Vergleich. Wenn Sie eine gute Note zu bekommen, dann können Sie Ihre Implementierung korrekt sein, und wenn nicht, wird ein wenig Fehlersuche notwendig sein ;-)

Um damit zu beginnen, würde ich vorschlagen, den Code neu anordnen, indem Sie die folgenden Funktionen definieren:

def train_test_split(X, y): 
    """ 
    Return a splitted version (X_train, y_train) and (X_test, y_test) of the dataset. 
    """ 

def linReg_train(X_train, y_train): 
    """ 
    Fit the model and return the weights. 
    """ 

def linReg_pred(X_test) 
    """ 
    Use the fitted model to predict values for all the points in X_test. 
    """ 

def linReg_score(y_predicted, y_test) 
    """ 
    Compare predicted and true outputs to assess model quality. 
    """ 

Einige Ressourcen, die Sie nützlich finden könnten:

  • A friendly introduction to linear regression with Python: eine Reihe von Videos, die ins Detail geht, wie lineare Regression zu implementieren.
  • Linear regression in scikit-learn: scikit-learn ist eine der nützlichsten Bibliotheken für maschinelles Lernen in Python, mit einer sehr gut geschriebenen Dokumentation. Wenn Sie Ihre eigenen Implementierungen von ML-Algorithmen schreiben möchten, sollten Sie sie überprüfen, indem Sie Ihre Daten über die Implementierungen von scikit-learn ausführen und die Ausgaben mit denen Ihrer eigenen Arbeit vergleichen.

Viel Glück!

+0

Vielen Dank für die Hilfe, ich werde das versuchen. – Raj

Verwandte Themen