上一篇文章我们介绍了通过神经网络来处理一个非线性回归的问题,这次我们将采用神经网络来处理一个多元分类的问题。
这次我们解决这样一个问题:输入一个人的身高和体重的数据,程序判断出这个人的身材状况,一共三个类别:偏瘦、正常、偏胖。
处理流程如下:
1、收集数据
2、构建神经网络
3、训练网络
4、保存和消费模型
详细步骤如下:
1、收集数据
对于一个复杂的业务数据,在实际应用时应该是通过收集取得数据,本文的重点不在数据收集,所以我们将制造一批标准数据来进行学习。
关于人体的胖瘦问题,有一个BMI算法,即:BMI=weight / (height * height),当BMI小于18时,认为偏瘦,当BMI大于28时,认为偏胖,18到28之间,认为正常。
首先随机生成身高和体重的数据,然后计算BMI值,并对结果进行标记,其中,偏瘦标记为0,正常标记为1,偏胖标记为2 。代码如下:
/// <summary> /// 加载训练数据 /// </summary> /// <param name="total_size"></param> private (NDArray, NDArray) PrepareData(int total_size) { float[,] arrx = new float[total_size, num_features]; int[] arry = new int[total_size]; for (int i = 0; i < total_size; i++) { float weight = (float)random.Next(30, 100) / 100; float height = (float)random.Next(140, 190) / 100; float bmi = (weight * 100) / (height * height); arrx[i, 0] = weight; arrx[i, 1] = height; switch (bmi) { case var x when x < 18.0f: arry[i] = 0; break; case var x when x >= 18.0f && x <= 28.0f: arry[i] = 1; break; case var x when x > 28.0f: arry[i] = 2; break; } }
12-27 21:32