VBScript深度学习入门——线性回归

背景

破电脑装不了VS、Py、IDea、Golang等主流编译器或其语言运行环境,但是自带.Net FrameWork 3.5,可以使用VBScript进行脚本编写,无所谓,反正都是了解底层原理学习,大不了手搓机器学习框架。

分析

了解线性回归的深度学习算法原理之后,就可以使用vbs进行代码实现,深入体会这个算法的精髓了。

假设有训练集

x(10)={1,2,3,4,5,6,7,8,9,10}

y(10)={11,21,31,41,51,61,71,81,91,101}

相信大家已经看出来了,y(i)=x(i)*10+1,其中i=0~9

但是计算机是不知道这个的,我们需要告诉计算机算法,让它自己求出系数k=10,截距b=1,然后让它计算测试集

input(11)={20,21,22,23,24,25,26,27,28,29,30}对应的结果output(11)的值

定义求和函数Forward,进行前向运算

' 前向运算
Function Forward(x,k,b)
	Forward=x*k+b
End Function

定义损失函数Loss,进行损失求值

' 损失值
Function Loss(res,y)
	Loss=(res-y)^2/2
End Function

系数k、截距b初始化为0~1的一个随机数

' 随机种子
Randomize
' 初始给k、b随机赋值
Dim k,b
k=Rnd()
b=Rnd()

迭代500轮训练后,得到结果

可以看出,结果符合预期,算法掌握得还可以,代码结构化、模式化、工程化还有待提高,望与诸君再接再厉。

完整代码[main.vbs]

' 启用显式编程风格,所有变量使用前必须定义
Option Explicit

' 简单封装输出函数
Sub Echo(s)
	Wscript.Echo s
End Sub

' 训练数据 x、y
Dim x:x=Array(1,2,3,4,5,6,7,8,9,10)
Dim y:y=Array(11,21,31,41,51,61,71,81,91,101)

' 随机种子
Randomize
' 初始给k、b随机赋值
Dim k,b
k=Rnd()
b=Rnd()

' 前向运算
Function Forward(x,k,b)
	Forward=x*k+b
End Function

' 损失值
Function Loss(res,y)
	Loss=(res-y)^2/2
End Function

' 训练轮数
Dim epoch:epoch=500
' 学习率
Dim lr:lr=0.01

Dim i,j
' 预测值
Dim yh
' 损失总和
Dim ls

' 系数损失
Dim kh
' 截距损失
Dim bh

' 训练
For i=0 To epoch
	For j=0 To UBound(x)
		yh=Forward(x(j),k,b)
		ls=Loss(yh,y(j))
		kh=(yh-y(j))*x(j)
		bh=yh-y(j)
		k=k-kh*lr
		b=b-bh*lr
		Echo ls
	Next
Next

' k、b保留最后三位小数
Echo "k="&k
Echo "b="&b
Echo "保留三位小数"
k=Round(k,3)
b=Round(b,3)
Echo "k="&k
Echo "b="&b

' 测试集
Dim input:input=Array(20,21,22,23,24,25,26,27,28,29,30)
Dim output
For i=0 To UBound(input)
	output=Forward(input(i),k,b)
	' 结果保留三位小数
	output=Round(output,3)
	Echo input(i)&"*"&k&"+"&b&"="&output
Next

猜你喜欢

转载自blog.csdn.net/qq_36694133/article/details/131029493