You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

2_logistic_regression_1.py 2.3 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import numpy as np
  2. from sklearn import datasets
  3. import matplotlib.pyplot as plt
  4. import torch
  5. from torch.autograd import Variable
  6. import torch.nn.functional as F
  7. # generate sample data
  8. centers = [(0, 0), (5, 5)]
  9. n_samples = 200
  10. x_train, y_train = datasets.make_blobs(n_samples=n_samples, n_features=2, cluster_std=1.0,
  11. centers=centers, shuffle=False, random_state=42)
  12. y_label = y_train
  13. # plot data
  14. plt.scatter(x_train[:, 0], x_train[:, 1], c=y_label, label="Real", cmap=plt.cm.Spectral)
  15. plt.show()
  16. # convert to tensor
  17. x_train = torch.from_numpy(x_train).float()
  18. y_train = torch.from_numpy(y_train).float()
  19. y_train.unsqueeze_(1)
  20. # define model parameters
  21. w = Variable(torch.randn(2, 1).float(), requires_grad=True)
  22. b = Variable(torch.zeros(1).float(), requires_grad=True)
  23. # construct the linear model
  24. x_train = Variable(x_train)
  25. y_train = Variable(y_train)
  26. # define logistic regression function
  27. def logistic_regression(x):
  28. return torch.sigmoid(torch.mm(x, w) + b)
  29. # define loss function
  30. def binary_loss(y_pred, y):
  31. logits = (y * y_pred.clamp(1e-12).log() + \
  32. (1 - y) * (1 - y_pred).clamp(1e-12).log()).mean()
  33. return -logits
  34. # upgrade parameters
  35. eta = 1e-2
  36. n_epoch = 3000
  37. for i in range(n_epoch):
  38. y_pred = logistic_regression(x_train)
  39. loss = binary_loss(y_pred, y_train)
  40. loss.backward()
  41. w.data = w.data - eta*w.grad.data
  42. b.data = b.data - eta*b.grad.data
  43. w.grad.zero_()
  44. b.grad.zero_()
  45. y_est = y_pred.ge(0.5).float()
  46. acc = float((y_est == y_train).sum().data[0]) / y_train.shape[0]
  47. if i % 10 == 0:
  48. print("epoch: %3d, loss: %f, acc: %f" % (i, loss.data[0], acc))
  49. # plot decision boundary
  50. w0 = float(w[0].data[0])
  51. w1 = float(w[1].data[0])
  52. b0 = float(b.data[0])
  53. print("w: %f %f, b = %f" % (w0, w1, b0))
  54. x_min = float(x_train[:, 0].min())
  55. x_max = float(x_train[:, 0].max())
  56. plot_x = np.arange(x_min, x_max, 0.1)
  57. plot_y = (-w0*plot_x - b0)/w1
  58. plt.scatter(x_train[:, 0], x_train[:, 1], c=y_label, label="Real", cmap=plt.cm.Spectral)
  59. plt.plot(plot_x, plot_y, 'g-', label="Decision boundary")
  60. plt.legend()
  61. plt.show()
  62. y_pred = logistic_regression(x_train)
  63. y_est = torch.Tensor(y_pred.size())
  64. y_est[y_pred > 0.5] = 1
  65. y_est[y_pred < 0.5] = 0
  66. y_est = y_est.numpy().flatten()
  67. err = np.sum((y_est - y_label)**2)
  68. print("err = %f" % err)

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。