为了账号安全,请及时绑定邮箱和手机立即绑定

我应该如何使用它的 `.components` 编写代码 scikit-learn PCA

我应该如何使用它的 `.components` 编写代码 scikit-learn PCA

莫回无 2021-07-15 18:23:06
现在我们从 1 开始,但在脉冲再次将其推回之前迅速下降到 0。Elman 网络可以解释一些时间依赖性,但它不擅长记住长期依赖性,并且会收敛到该输入的“最常见输出”。所以为了解决这个问题,我建议使用一个众所周知的网络,它可以很好地处理长期依赖关系,即长短期记忆 (LSTM) rnn,有关更多信息,请参阅torch.nn.LSTM。保持 "h_state = None" 并将 torch.nn.RNN 更改为 torch.nn.LSTM。完整的代码和情节见下文import torchimport numpy, mathimport matplotlib.pyplot as pltnofSequences = 5maxLength = 130# Generate training datax_np = numpy.zeros((nofSequences,maxLength,1))y_np = numpy.zeros((nofSequences,maxLength))numpy.random.seed(1)for i in range(0,nofSequences):    startPos = numpy.random.random()*50    for j in range(0,maxLength):        if j>=startPos and j<startPos+10:            x_np[i,j,0] = math.sin((j-startPos)*math.pi/10)        else:            x_np[i,j,0] = 0.0        if j<startPos+10:            y_np[i,j] = 1        else:            y_np[i,j] = 0# Define the neural networkINPUT_SIZE = 1class RNN(torch.nn.Module):    def __init__(self):        super(RNN, self).__init__()        self.rnn = torch.nn.LSTM(            input_size=INPUT_SIZE,            hidden_size=16,     # rnn hidden unit            num_layers=1,       # number of rnn layer            batch_first=True,        )        self.out = torch.nn.Linear(16, 2)    def forward(self, x, h_state):        r_out, h_state = self.rnn(x, h_state)        outs = []    # save all predictions        for time_step in range(r_out.size(1)):    # calculate output for each time step            outs.append(self.out(r_out[:, time_step, :]))        return torch.stack(outs, dim=1), h_state# Learn the networkrnn = RNN()optimizer = torch.optim.Adam(rnn.parameters(), lr=0.01)h_state = None      # for initial hidden statex = torch.Tensor(x_np)    # shape (batch, time_step, input_size)y = torch.Tensor(y_np).long()torch.manual_seed(2)numpy.random.seed(2)for step in range(100):    prediction, h_state = rnn(x, h_state)   # rnn output    # !! next step is important !!    h_state = None        
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

PCA 从将数据居中开始:减去所有观察值的平均值。在这种情况下,居中是通过


centered_data = data3d - data3d.mean(axis=0)

沿轴 = 0(行)求平均值意味着只剩下一行,包含平均值的三个分量。居中后,将数据乘以PCA分量;但我不会手动写出矩阵乘法,而是使用.dot:


my_transformed2d = pca.components_.dot(centered_data[sample_index])

最后,验证。不要==在浮点数之间使用;完全平等是罕见的。由于某处的操作顺序不同,会出现微小的差异:例如,


0.1 + 0.2 - 0.3 == 0.1 - 0.3 + 0.2

是假的。这就是为什么我们有np.allclose,它说“它们足够接近”。


if np.allclose(my_transformed2d, pca_transformed2d[sample_index]):

    print("My transformation is correct!")

else:

    print("My transformation is not correct...")


查看完整回答
反对 回复 2021-07-21
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号