2016-12-24 6 views
0

Я только начал с машинного обучения, провел несколько часов обучения линейной регрессии. Основываясь на моем понимании, я реализовал его с нуля в python (код ниже) без регуляризации. Является ли моя логика правильной или она нуждается в каких-либо улучшениях?Проверка выполнения линейной регрессии с использованием 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) 

ответ

0

Чтобы проверить модель, простая вещь, чтобы сделать было бы разделить ваши данные в обучающем наборе и тестовый набор. Учебный набор используется для подходит к модели, передавая ее в качестве аргумента функции linReg, а функции тестового набора используются для прогноза (с вашей так называемой функцией predict).

Вам будет нужна третья функция для забьет модель, по сравнивая предсказания с фактическими значениями, приведенными данными. Если вы получаете хорошие оценки, то ваша реализация может быть правильным, и если нет, то немного отладки необходимо будет ;-)

Для начала, я хотел бы предложить перестраивает ваш код, определив следующие функции:

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. 
    """ 

Некоторые ресурсы могут оказаться полезными:

  • A friendly introduction to linear regression with Python: серия видео, который идет в подробности о том, как реализовать линейную регрессию.
  • Linear regression in scikit-learn: scikit-learn - одна из самых полезных библиотек для машинного обучения на Python с очень хорошо написанной документацией. Если вы планируете написать свои собственные алгоритмы ML, вы можете проверить их, запустив свои данные с помощью реализации scikit-learn и сравните результаты с результатами вашей собственной работы.

Удачи вам!

+0

Благодарим за помощь, я попробую это. – Raj

Смежные вопросы