1.回归:回归分析是统计学上常见的学习方法。通俗来讲,就是现在有几个变量,这些变量之间有一定的相关性,然后我们希望通过几个变量的值去预测其中另外一个变量的变化关系。比如说用时间、城市、房屋大小等等房屋信息来预测房价,股票信息如前几天股价、股票行业等等去预测未来几天的股价的走势,或是未来几天的温度变化。
2.神经网络就是这么强大,使用感知机以及多层感知机就能完成回归以及分类的几个问题。
3.传统的回归模型:传统的线性回归通常采用的是最小二乘法,就是说这些点要拟合出一条直线,这条直线有一定的约束条件,希望图上所有的点到这条直线的距离之和取到最小。
在神经网络中,条件不太一样。采用迭代方式得出这条直线。
2. 损失函数MSE:均方误差,一般用于回归问题。它指的是真实值与预测值的差的平方和再除以点的个数。区别于传统二乘法的线性回归的点到直线。我们希望找到感知机能够使真实值点与预测点距离之和最小。
5.# 采用感知机
model = Sequential()
model.add(Dense(1, input_shape=(1,)))
model.compile(optimizer=SGD(), loss='MSE')
# 因为模型比较简单,不需要迭代太多次
for step in range(5001):
cost = model.train_on_batch(x_data, y_data) # 输出代价函数,也就是损失函数
# 希望能在训练过程中,看到值的变化情况
if step % 500 == 0:
print('step', step, ' cost:', cost)
# cost值越来越小,说明在收敛,也就是达到了代价函数的全局最小值
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.optimizers import SGD
from keras.layers import Dense
x_data = np.random.rand(100)
noise = np.random.normal(0,0.01,x_data.shape)
y_data = 0.1*x_data + 0.2 + noise
plt.scatter(x_data,y_data)
plt.show()
model = Sequential()
model.add(Dense(1,input_shape=(1,)))
model.compile(optimizer=SGD(),loss="MSE")
for step in range(5001):
cost=model.train_on_batch(x_data,y_data)
if step % 500 ==0:
print("step:",step,"cost:",cost)
W,b = model.layers[0].get_weights()
print("W:",W,"b:",b)
y_pred = model.predict(x_data)
plt.scatter(x_data,y_data)
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()