21.10.18-21.10.24
周学习任务:
100% 回顾吴恩达机器学习前4章节
10% 神经网络学习
机器学习:用已知的数据集通过数学模型使得程序能够像人一样的去思考,然后对未知数据做出预测
分类问题
以及回归问题
。for
循环来进行两个参数的选择,但是计算出的值与真实值之间会存在误差,我们需要对误差进行获取以及得到最优的参数值,所以引入了代价函数==进行误差的分析。代价函数:在回归模型中,使用 J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( 预 测 值 h θ ( x i ) − 真 实 值 y i ) 2 样 本 数 据 数 量 m J(\theta{_0},\theta{_1})=\frac{1}{2m}\sum_{i=1}^{m}\frac {(预测值h{_\theta{}}(x_{i})-真实值y{_i})^2}{样本数据数量m} J(θ0,θ1)=2m1∑i=1m样本数据数量m(预测值hθ(xi)−真实值yi)2来作为其代价函数,如下通过 θ 1 \theta{_1} θ1的变化,求得对应 θ 1 = 1 \theta{_1}=1 θ1=1时有最小的代价函数值。当对下图右边进行求导时 ∂ J ( θ 1 ) ∂ θ 1 \frac {\partial J(\theta{_1})}{\partial \theta{_1}} ∂θ1∂J(θ1),会发现越靠近最优解时,其偏导数是越靠近0的。
梯度下降:为了使得参数变化和代价函数关联起来,使用 θ j : = θ 1 − α ∂ J ( θ 0 , θ 1 ) ∂ θ j \theta{_j}:=\theta{_1}-\alpha \frac{\partial J(\theta{_0},\theta{_1})}{\partial \theta{_j}} θj:=θ1−α∂θj∂J(θ0,θ1)对各个参数进行同步改值,其中== α \alpha α==为学习率,太大太小均不可。梯度下降的过程中,接近最优解的时候,偏导数会越来越接近0,那步长也就会越来越小,最终达到合适的权重值。一下为梯度下降算法的流程。
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing as fch #加州房价预测数据
#数据的提取
feature=fch().data
target=fch().target
#数据的拆分
x_train,x_text,y_train,_y_test=train_test_split(feature,target,test_size=0.1,random_state=2021)
linear=LinearRegression() #模型初始化
#模型的训练
linear.fit(x_train,y_train)
#得到权重参数值 linear.coef_
#打印权重参数名以及参数值
[*zip(fch().feature_names,linear.coef_)]
可以看到值越小的参数对最后的预测值影响越小。
模型的评估:使用MSE(均方误差)来衡量真实值和预测值之间的差异
from sklearn.metrics import mean_squared_error
y_true=y_test #将真实值存到y_true中
y_pred=linear.predict(x_test) #通过模型对测试数据集中的数据进行预测
mean_squared_error(y_true,y_pred)#MSE值0.5253224455144776
#使用交叉验证中的均方误差
from sklearn.model_selection import cross_val_score
cross_val_score(linear,x_train,y_train,cv=5,scoring='neg_mean_squared_error').mean() #loss(损失值)-0.5284704303001286正数就为MSE
拟合图
#绘制拟合图
%matplotlib inline
import matplotlib.pyplot as plt
y_pred=linear.predict(x_test)
plt.plot(range(len(y_test)),sorted(y_test),c="black",label="y_true")
plt.plot(range(len(y_pred)),sorted(y_pred),c="red",label="y_predict")
plt.legend()
plt.show
当mse越接近0的时候,数据将会更加的拟合
在使用线性回归梯度下降的时候,其中 θ \theta θ的值是通过代价函数反复确定,增加了循环地次数,在矩阵的运算中,我们可以一次使用多组数据作为参数,求出多组不同的预测值。所以当函数方程存在多个输入参数时,方便求解。引入矩阵时为了后面的正规方程寻最优解
特征缩放:当数据很大的时候,为了方便计算,我们可以将简单的有规律的数值进行特征缩放,使得我们的梯度下降的更快,收敛也更快。
监控代价函数:为了监控是否达到最小,可以使用执行次数和代价函数值画出图像就行监控。一般可以使用一个阈值进行自动收敛测试。代价函数也有有很大部分收学习率的影响,所以我们也要通过合适的算法选取合适的学习率
正规方程
梯度下降核心:通过对代价函数求偏导,得到近似0的值(等于0就是类似于极值的求解),最终得到合适的参数
正规方程核心:利用矩阵的运算:$\theta X=Y 通 过 矩 阵 的 变 换 ( 转 置 , 逆 矩 阵 等 ) 得 到 通过矩阵的变换(转置,逆矩阵等)得到 通过矩阵的变换(转置,逆矩阵等)得到\theta$的值
求得 θ = ( X T X ) − 1 X T Y \theta=(X^TX)^{-1}X^T Y θ=(XTX)−1XTY (考虑是否可逆:一般均可在octave中用pinv算出,inv只能算不可逆的)
不可逆的情况:特征值之间有关系比例
奇异矩阵或者退化矩阵:存在多余的feature
让程序像大脑一样思考,模拟大脑的神经传递,将参数通过一层一层的映射关系传递到最后得到最终的结果
当某一个模型中输入参数变得很大的时候,如图像中的像素块分解作为参数,使用常规的模型会使得计算量变得很大。
存在一组数据有海量数据,我们需要将这里面的数据进行多个分类,其最终的预测值不止一个。