机器学习模型是训练有素经过循环播放多次传输数据。
对于每次迭代,重量值进行了调整。
当迭代失败时训练完成降低成本。
训练我找到最适合的线:
梯度下降是解决人工智能问题的流行算法。
一个简单的线性回归模型可用于演示梯度下降。
线性回归的目标是将线性图拟合到一组 (x,y) 点。这可以用数学公式来解决。但一个机器学习算法也可以解决这个问题。
这就是上面的例子所做的。
它从散点图和线性模型 (y = wx + b) 开始。
然后它训练模型找到一条适合绘图的线。这是通过改变线的权重(斜率)和偏差(截距)来完成的。
下面是一个代码训练对象可以解决这个问题(以及许多其他问题)。
创建一个 Trainer 对象,该对象可以在两个数组 (xArr,yArr) 中获取任意数量的 (x,y) 值。
将权重设置为零,将偏差设置为 1。
必须设置学习常数(learnc),并且必须定义成本变量:
示例
function Trainer(xArray, yArray) {
this.xArr = xArray;
this.yArr = yArray;
this.points = this.xArr.length;
this.learnc = 0.00001;
this.weight = 0;
this.bias = 1;
this.cost;
解决回归问题的标准方法是使用 "Cost Function" 来衡量解决方案的好坏。
该函数使用模型中的权重和偏差 (y = wx + b),并根据线条与图的拟合程度返回错误。
计算此误差的方法是循环遍历图中的所有 (x,y) 点,并对每个点的 y 值与直线之间的平方距离求和。
最传统的方法是对距离进行平方(以确保为正值)并使误差函数可微。
this.costError = function() {
total = 0;
for (let i = 0; i < this.points; i++) {
total += (this.yArr[i] - (this.weight * this.xArr[i] + this.bias)) **2;
}
return total / this.points;
}
的另一个名字成本函数是误差函数。
该函数中使用的公式实际上是这样的:
我们现在将运行梯度下降。
梯度下降算法应该使成本函数走向最佳线。
每次迭代都应将 m 和 b 更新为成本较低(错误)的线。
为此,我们添加一个训练函数,多次循环所有数据:
this.train = function(iter) {
for (let i = 0; i < iter; i++) {
this.updateWeights();
}
this.cost = this.costError();
}
上面的训练函数应该在每次迭代中更新权重和偏差。
移动方向使用两个偏导数计算:
this.updateWeights = function() {
let wx;
let w_deriv = 0;
let b_deriv = 0;
for (let i = 0; i < this.points; i++) {
wx = this.yArr[i] - (this.weight * this.xArr[i] + this.bias);
w_deriv += -2 * wx * this.xArr[i];
b_deriv += -2 * wx;
}
this.weight -= (w_deriv / this.points) * this.learnc;
this.bias -= (b_deriv / this.points) * this.learnc;
}
function Trainer(xArray, yArray) {
this.xArr = xArray;
this.yArr = yArray;
this.points = this.xArr.length;
this.learnc = 0.000001;
this.weight = 0;
this.bias = 1;
this.cost;
// Cost Function
this.costError = function() {
total = 0;
for (let i = 0; i < this.points; i++) {
total += (this.yArr[i] - (this.weight * this.xArr[i] + this.bias)) **2;
}
return total / this.points;
}
// Train Function
this.train = function(iter) {
for (let i = 0; i < iter; i++) {
this.updateWeights();
}
this.cost = this.costError();
}
// Update Weights Function
this.updateWeights = function() {
let wx;
let w_deriv = 0;
let b_deriv = 0;
for (let i = 0; i < this.points; i++) {
wx = this.yArr[i] - (this.weight * this.xArr[i] + this.bias);
w_deriv += -2 * wx * this.xArr[i];
b_deriv += -2 * wx;
}
this.weight -= (w_deriv / this.points) * this.learnc;
this.bias -= (b_deriv / this.points) * this.learnc;
}
} // End Trainer Object
现在您可以在 HTML 中包含该库:
<script src="myailib.js"></script>
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!