Неправильный ответ при выполнении моего кода - PullRequest
0 голосов
/ 08 июня 2018

Когда я выполняю свой код, я получаю av_Ein как 0, но ответ (av_Ein) близок к 0,01.Пожалуйста, помогите мне найти ошибку.** Данный вопрос **

В этих задачах мы рассмотрим, как работает линейная регрессия для классификации.Как и в случае с алгоритмом обучения Perceptron в домашней задаче № 1, вы создадите свою собственную целевую функцию f и набор данных D. Возьмите d = 2, чтобы вы могли визуализировать проблему, и предположим, что X = [−1,1] × [−1,1] с одинаковой вероятностью выбора каждого x ∈ X. В каждом прогоне выберите случайную линию на плоскости в качестве целевой функции f (сделайте это, взяв две случайные, равномерно распределенные точки в [−1,1] × [−1], 1] и беря линию, проходящую через них), где одна сторона линии отображается в +1, а другая в -1.Выберите входные данные xn набора данных как случайные точки (равномерно по X) и оцените целевую функцию для каждого xn, чтобы получить соответствующий выход yn.

Take N = 100. Используйте линейную регрессию, чтобы найти g иоцените Ein, долю точек в выборке, которые были классифицированы неправильно.Повторите эксперимент 1000 раз и возьмите среднее значение (сохраните g, поскольку они будут использоваться снова в задаче 6).Какое из следующих значений ближе всего к среднему Ein?(Ближайшим является параметр, который делает выражение | заданным вами вариантом ответа | наиболее близким к 0. Используйте это определение ближайшего здесь и далее.

МОЙ КОД

import numpy as np
import pandas as pd
import math
from numpy.linalg import inv
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model

av_Ein =0
for P in range(0,1000):
    #Target Line calculation
    line = {}#Target Line
    x1,y1 = np.random.uniform(-1,1,2)
    x2,y2 = np.random.uniform(-1,1,2)
    m = (y2-y1)/(x2-x1)
    line['x'] = m
    line['y'] = -1
    line['c'] = y1-m*x1
    X = np.random.uniform(-1,1,(100,2))
    X = np.c_[np.ones(100),X]
    #------
    #Target calculation

    Y =[]#Target
    for i in range(0,100):
        Y.append(line['c']*1+line['x']*X[i][1]+line['y']*X[i][2])

    #------
    #For calculating the weight function W = pseudoinverse(X) x Y

    X_tran = X.transpose()
    temp_1 = np.matmul(X_tran,X)
    temp_inv = inv(temp_1)
    temp_1 = np.matmul(temp_inv,X_tran)
    W = np.matmul(temp_1,Y)

    #end of calculation

    #E_in(insample error) claculation for this final hypothesis

    E_in=0#(No of times the final hypothesis not matching with target /len(Target))

    #No of misclassified insample points

    for k in range(0,100):
        if np.sign(X[k][0]*W[0]+X[k][1]*W[1]+X[k][2]*W[2]) != np.sign(Y[k]):
            E_in = E_in+1
        #E_in = E_in+math.pow((lm.predict([X[k]])-Y[k]),2)

    #---

    E_in = E_in/100#E_in calculation
    av_Ein = av_Ein+E_in

av_Ein = av_Ein/1000 #(AVg of all the insmple error)
print(av_Ein)
...