这里是一个简单的线性拟合的例子,利用numpy生成一些数据,其中要拟合的参数是
W
W
W和
b
b
b,原数据中的
W
=
[
0.1
,
0.2
]
,
b
=
0.3
W=[0.1, 0.2],b=0.3
W=[0.1,0.2],b=0.3。
在机器学习的算法中,我们一般有三个部分:
- 模型:即决策函数
- 策略:求解最优解的决策函数,即损失函数
- 算法:最后的求解(优化过程)
下面给出这个简单的例子,然后来了解上面的三个部分分别对应的是什么。
import tensorflow as tf
import numpy as np
#使用Numpy生成假数据,总共100个点
X_data = np.float32(np.random.rand(2, 100)) # 2*100
y_data = np.dot([0.1, 0.2], X_data) + 0.300 #1*100
# print(np.shape(X_data))
#构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1,2], -1.0, 1.0)) #返回一个1*2的矩阵,其中值符合[-1.0, 1.0)之间的均匀分布
y = tf.matmul(W, X_data) + b
#最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5) #0.5是学习率
train = optimizer.minimize(loss)
#初始化变量
init = tf.initialize_all_variables()
#启动图(graph)
sess = tf.Session()
sess.run(init)
#拟合平面
for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
最终的输出:
0 [[ 0.01752257 -0.3330099 ]] [1.2142264]
20 [[-0.01999345 -0.02930895]] [0.4748085]
40 [[0.05509594 0.12610018]] [0.35955435]
60 [[0.08394848 0.17574227]] [0.32022607]
80 [[0.09439855 0.19194436]] [0.3068567]
100 [[0.09807114 0.19730562]] [0.30232194]
120 [[0.09934083 0.1990949 ]] [0.30078578]
140 [[0.09977572 0.19969516]] [0.30026582]
160 [[0.09992389 0.19989717]] [0.3000899]
180 [[0.09997422 0.1999653 ]] [0.30003038]
200 [[0.09999127 0.19998829]] [0.30001026]
我们看到,迭代200次之后,
W
W
W和
b
b
b的值都拟合到了和实际值非常相近的程度。
这里,模型就是我们构造的线性模型,策略是最小化方差,算法是梯度下降。