找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1747|回复: 3

[求助] 求一条斜线,距离各个点的距离最短

47

主题

105

帖子

105

积分

侠客

积分
105
aggopie 发表于 2019-1-15 10:19:59 | 显示全部楼层 |阅读模式
本帖最后由 aggopie 于 2019-1-15 10:44 编辑

怎么求一个平面上有很多点,类似图上黑点,然后求这些点距离某条线的距离最短的那个条线,(这个斜线是不是可以用Y=AX+B的方式表达出来)
360软件小助手截图20190115101813.png
回复

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
chdlkl 发表于 2019-1-16 00:28:48 | 显示全部楼层
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt

  4. path = 'ex1data1.txt'
  5. data = pd.read_csv(path, header = None, names = ['Population', 'Profit'])
  6. print(data.head())
  7. print(data.describe())

  8. data.plot(kind = 'scatter', x = 'Population', y = 'Profit', figsize = (12,8))
  9. plt.show()

  10. def computeCost(X, y, theta):   # 构造代价函数
  11.         inner = np.power(((X * theta.T) - y), 2)
  12.         return np.sum(inner) / (2 * len(X))

  13. data.insert(0, 'Ones', 1)  # 在data中添加一列1

  14. # 变量初始化
  15. # set X (training data) and y (target variable)
  16. cols = data.shape[1]
  17. X = data.iloc[:,0:cols-1]  # X是所有行,去掉最后一列
  18. y = data.iloc[:,cols-1:cols]  # X是所有行,最后一列

  19. print(X.head())
  20. print(y.head())

  21. # 初始化
  22. X = np.matrix(X.values)
  23. y = np.matrix(y.values)
  24. theta = np.matrix(np.array([0,0]))

  25. # 查看数组维度
  26. print(X.shape, theta.shape, y.shape)
  27. # 计算代价函数
  28. print(computeCost(X, y, theta))


  29. # batch gradient decent 批量梯度下降
  30. def gradientDescent(X, y, theta, alpha, iters):
  31.         temp = np.matrix(np.zeros(theta.shape))
  32.         parameters = int(theta.ravel().shape[1])
  33.         cost = np.zeros(iters)
  34.         
  35.         for i in range(iters):
  36.                 error = (X * theta.T) - y
  37.                
  38.                 for j in range(parameters):
  39.                         term = np.multiply(error, X[:,j])
  40.                         temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))

  41.                 theta = temp
  42.                 cost[i] = computeCost(X, y, theta)
  43.                
  44.         return theta, cost

  45. # 初始化附加变量
  46. alpha = 0.01   # 学习率
  47. iters = 1000   # 迭代次数上限

  48. theta, cost = gradientDescent(X, y, theta, alpha, iters)
  49. print(theta)

  50. # 最后,我们可以使用拟合的参数计算训练模型的代价函数(误差)
  51. print(computeCost(X, y, theta))

  52. # 绘图
  53. x = np.linspace(data.Population.min(), data.Population.max(), 100)
  54. f = theta[0, 0] + (theta[0, 1] * x)

  55. fig, ax = plt.subplots(figsize = (12, 8))
  56. ax.plot(x, f, 'r', label = 'Prediction')
  57. ax.scatter(data.Population, data.Profit, label = 'Training Data')
  58. ax.legend(loc = 2)
  59. ax.set_xlabel('Population')
  60. ax.set_ylabel('Profit')
  61. ax.set_title('Predicted Profit vs. Population Size')
  62. plt.show()
复制代码

你这个就是个线性回归问题,将你对应的X和Y写成两列,文件名为ex1data1.txt。运行上面代码即可
回复 支持 反对

使用道具 举报

47

主题

105

帖子

105

积分

侠客

积分
105
aggopie  楼主| 发表于 2019-1-16 09:46:22 | 显示全部楼层
chdlkl 发表于 2019-1-16 00:28
你这个就是个线性回归问题,将你对应的X和Y写成两列,文件名为ex1data1.txt。运行上面代码即可 ...

多谢,我先看看,不懂的再来向您请教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表