首页 > 解决方案 > Python 中的布尔值、随机状态

问题描述

我正在研究 Adaline SGD 方法,我对我的代码有一些疑问(我不会将整个算法用于说明它的广泛性):

 def __init__(self, eta=0.01, n_iter=50, shuffle=True, random_state =None) :
    self.eta = eta
    self.n_iter=n_iter
    self.w_initialized=False
    self.shuffle=True
    self.random_state = random_state 

def partial_fit(self,X,y):
    """Fit  training data without reinitializing the weights"""
    if not self.w_initialized:
        self._initialize_weights(X.shape[1])
    if y.ravel().shape[0]>1:
        for xi, target in zip(X,y):
            self._update_weights(xi, target)


def _shuffle(self,X,y):
    """Suffle training data"""
    r=self.rgen.permutation(len(y))
    return X[r], y[r]

def _initialize_weights(self,m):
    """Initialize weights to small random numbers"""
    self.rgen= np.random.RandomState(self.random_state)
    self.w_=self.rgen.normal(loc= 0.0, scale= 0.01, size = 1+m)
    self.w_initialized=True
  1. 为什么在开始时self.w_initialized设置为False中,而后def __init__(self, eta=0.01, n_iter=50, shuffle=True, random_state =None)设置为Truedef _initialize_weights(self,m)结束时?我不明白它是如何工作的。

  2. 为什么r=self.rgen.permutation(len(y))它没有写到...len(y)+1涵盖整个列表?(注意:在下一行,X[r], y[r]我假设返回相同的向量交替随机,如果我错了,请告诉我)

  3. m变量在做什么self.w_=self.rgen.normal(loc= 0.0, scale= 0.01, size = 1+m)?我知道的意思size,但是,将m加1后的结果是什么?

让我知道是否需要更多上下文。对不起,如果我的英语不完美。

标签: pythonboolean

解决方案


回复 1.:

self.w_initialized似乎表明权重是否已初始化,因此当创建对象时__init__()不是这种情况,但在_initialize_weights()调用并完成之后就是这种情况,因此self.w_initialized设置True为反映这一点。它实际上并没有任何事情,除了明确使用现在已经完成的对象的任何事情。

回复 2:

不清楚为什么您认为permutation()需要长度 +1?有一个正好是 的长度的排列似乎是有意义的y,假设它被用于下一行来获得y[r]?

至于你的问题的第二部分,这行字面意思是它所说的:它返回 tuple X[r], y[r],因此是一个向量,其中的元素来自Xindexed byr并且与 for 相同y。看起来,它们是Xand的随机排列,而不知道更多关于您没有共享的代码或导入的信息。y

回复 3.:

同样,您的问题令人惊讶:m是否将参数传递给_initialize_weights(),将 1 添加到其中,并将结果值传递给size参数self.rgen.normal- 究竟有什么不清楚的地方?

一般的:

从您的问题来看,您似乎对 Python 非常陌生,我建议您阅读 Python 中变量、函数和对象的基础知识,然后重新访问代码。您的问题实际上与代码的含义无关,但似乎是关于 Python 基本工作原理的问题。我假设您所谓的“您的代码”实际上是您获得并试图理解或修改的代码。


推荐阅读