Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 利用神经网络从体重和身高预测年龄_Python_Neural Network - Fatal编程技术网

Python 利用神经网络从体重和身高预测年龄

Python 利用神经网络从体重和身高预测年龄,python,neural-network,Python,Neural Network,我是机器学习的新手,我试着写一篇文章,告诉他根据一个人的体重和身高来预测他的年龄 这是我的数据: import numpy as np import matplotlib.pyplot as plt # weight,height,age data=[[50,160,15], [45,156,13], [55,162,17], [56,163,18], [58,163.4,20], [12,85,2], [14.2,95

我是机器学习的新手,我试着写一篇文章,告诉他根据一个人的体重和身高来预测他的年龄

这是我的数据:

import numpy as np
import matplotlib.pyplot as plt

# weight,height,age

data=[[50,160,15],
      [45,156,13],
      [55,162,17],
      [56,163,18],
      [58,163.4,20],
      [12,85,2],
      [14.2,95,3],
      [15.4,100,4],
      [32,138.4,10],
      [25.8,128.3,8]]

# missing age data
mys=[22.4,121.1]
取随机变量的权重

w1=np.random.rand()
w2=np.random.rand()
b=np.random.rand()
使数据可视化

 for i in range(len(data)):
      point=data[i]
      plt.xlabel('weight')
      plt.ylabel('length')
    
    
      plt.scatter(point[0],point[1],c='red')
    plt.scatter(mys[0],mys[1],marker='x',color='black',s=80)
这是我的神经网络

alpha=0.00001


for i in range(500):
  ri=np.random.randint(len(data))
  point=data[ri]

  pred=(point[0]*w1)+(point[1]*w2)+b
  target=point[2]
  cost=(pred-target)**2


  dcost_pred=2*(pred-target)
  dpred_w1=point[1]
  dpred_w2=point[0]
  dpred_db=1

  dcost_w1=dcost_pred*dpred_w1
  dcost_w2=dcost_pred*dpred_w2
  dcost_b=dcost_pred*dpred_db

  w1=(w1-alpha*dcost_w1)
  w2=w2-alpha*dcost_w2
  b=b-alpha*dcost_b
  print(cost)
不幸的是,我的成本不断增加,我还有两个问题 1-我什么时候应该使用乙状结肠? 2-如何选择正确的alpha


ps:我期望7个输出(缺失数据的年龄)

在线性回归中不需要S形图,因为我们想要的是绝对值而不是概率


对于线性回归,使用正态方程更好,因此您可以参考我的github repo

您提出的问题有三个部分

第一部分(代码有什么问题)回答:没有任何错误。正确的lr和初始化

第二部分(使用乙状结肠的位置)。答:回归中没有任何地方

第三部分(正确的alpha):Ans:从1开始运行模型并观察损失。使alpha=1e-1,依此类推。在整个过程中观察损失。无论哪个阿尔法产生小损失,选择那个

第1部分代码:(制作以下工艺)

是的,就是这样:)你可以保留一份每一次损失的损失清单。我为你的代码保存了它,得到了下面的图表。(注意我只使用了50个纪元。您可以保留更高的值)

完整代码

import numpy as np
import matplotlib.pyplot as plt

# weight,height,age

data=[[50,160,15],
      [45,156,13],
      [55,162,17],
      [56,163,18],
      [58,163.4,20],
      [12,85,2],
      [14.2,95,3],
      [15.4,100,4],
      [32,138.4,10],
      [25.8,128.3,8]]

# missing age data
mys=[22.4,121.1]

w1=np.random.rand()
w2=np.random.rand()
b=0
alpha=0.00001

loss = []
for i in range(50):
  ri=np.random.randint(len(data))
  point=data[ri]

  pred=(point[0]*w1)+(point[1]*w2)+b
  target=point[2]
  cost=(pred-target)**2


  dcost_pred=2*(pred-target)
  dpred_w1=point[1]
  dpred_w2=point[0]
  dpred_db=1

  dcost_w1=dcost_pred*dpred_w1
  dcost_w2=dcost_pred*dpred_w2
  dcost_b=dcost_pred*dpred_db

  w1=(w1-alpha*dcost_w1)
  w2=w2-alpha*dcost_w2
  b=b-alpha*dcost_b
  loss.append(cost)

plt.plot(loss)

你知道成本增加的原因吗?你正在更新每个实例的权重(每个数据点)…对一批数据进行更新。你能解释更多吗?@TuneshVerma我不同意第二点。根据普遍逼近定理,他们可以学习任何函数。@Ragnar,这就是我的想法,感谢你澄清了Sigmoid不是回归激活的选择。此外,alpha是一个超参数,这意味着它必须由您手动调整。你可以考虑增加对数。你的代码看起来是正确的。为了清晰起见,我建议您使用类和方法编写它。另外,在这个过程中使用numpy。在网络中传递批。它会运行得更快。@ragnar我越来越困惑,因为一切似乎都很好,我尝试将alpha作为一个随机数,但也没有用更高的值启动alpha,比如alpha=1,然后将其设为0.1。后来流行1e-2、1e-3、1e-4等等。希望这能回答你所有的问题。如果这对你有帮助,那么请向上投票并接受这个答案:)我为什么要制作(b)数组?我也尝试了你所做的更改,但也不起作用。如果你不想这样做,请将其设为b=0。我已经修改了答案。请查收
import numpy as np
import matplotlib.pyplot as plt

# weight,height,age

data=[[50,160,15],
      [45,156,13],
      [55,162,17],
      [56,163,18],
      [58,163.4,20],
      [12,85,2],
      [14.2,95,3],
      [15.4,100,4],
      [32,138.4,10],
      [25.8,128.3,8]]

# missing age data
mys=[22.4,121.1]

w1=np.random.rand()
w2=np.random.rand()
b=0
alpha=0.00001

loss = []
for i in range(50):
  ri=np.random.randint(len(data))
  point=data[ri]

  pred=(point[0]*w1)+(point[1]*w2)+b
  target=point[2]
  cost=(pred-target)**2


  dcost_pred=2*(pred-target)
  dpred_w1=point[1]
  dpred_w2=point[0]
  dpred_db=1

  dcost_w1=dcost_pred*dpred_w1
  dcost_w2=dcost_pred*dpred_w2
  dcost_b=dcost_pred*dpred_db

  w1=(w1-alpha*dcost_w1)
  w2=w2-alpha*dcost_w2
  b=b-alpha*dcost_b
  loss.append(cost)

plt.plot(loss)