当我执行我的代码时,我将av_Ein设为0,但答案(av_Ein)接近0.01。 请帮我找错。 **给出问题**
在这些问题中,我们将探讨线性回归如何分类。与家庭作业#1中的感知器学习算法一样,您将创建自己的目标函数f和数据集D.取d = 2,这样您就可以看到问题,并假设X = [-1,1]×[-1, 1]具有均匀的拾取概率x∈X。在每次运行中,选择平面中的随机线作为目标函数f(通过在[-1,1]×[-1]中取两个随机均匀分布的点来做到这一点,1]并通过它们的线),线的一侧映射到+1,另一侧映射到-1。选择数据集的输入xn作为随机点(均匀地在X中),并评估每个xn上的目标函数以获得相应的输出yn。
取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)