(算法必会流程和必备知识)

一、损失函数,目标函数,代价函数

图片.png

二、算法的流程:

算法是核心,数据和计算是基础
定位:
1、分析数据
2、分析业务
3、应用常见算法进行对比校验
4、特征工程、调参、优化

数据类型
离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所以数据全是整数
连续型数据:变量可以在某一范围内任取一数,即变量的取值是可以连续的,通常是小数
注意:离散型是区间内不可分,连续型区间内可分

算法分类:
监督学习:特征值和目标值
分类(目标值是离散型):K近邻,贝叶斯、决策树、随机森林、逻辑回归、神经网络
回归(目标值是连续型):线性回归、岭回归
非监督学习:特征值
聚类:K均值(K-means)

算法开发流程:
1、准备数据
公司本身数据
kaggle
购买数据
2、明确问题(分类还是回归)
建立算法数据:根据数据类型划分应用种类
3、数据基本处理
pd去处理数据(缺失值,合并表....)
4、特征工程
特征进行处理(训练集,测试集、验证集)
5、找寻合适的算法进行分析
1、估计器选择
2、调用fit(x_train,y_train)
3、调用 a)预测:y_predict=predict(x_test) b)预测的准确率:score(x_test,y_test)
6、模型的评估 ---->评估不合格,则考虑:1、换算法 2、调参数 3、特征工程再进一步处理
7、模型实现预测,以API形式提供

数据集划分
训练集:70% 75%(建议) 80%
测试集:30% 25%(建议) 20%
验证集
API: Sklearn.model_selection.train_test_split(*arrays, **options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机
采样结果。相同的种子采样结果相同。
return 训练集特征值,测试集特征值,训练标签,测试标签
(默认随机取)

Sklearn数据集Api
datasets.load_() #获取小规模数据集
datasets.fetch_
(data_home=None) #获取大的数据集

小数据集:
    load*和fetch*返回的数据类型datasets.base.Bunch(字典格式)
        data:特征数据数组,是 [n_samples * n_features] 的二维 
              numpy.ndarray 数组
        target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
        DESCR:数据描述
        feature_names:特征名,新闻数据,手写数字、回归数据集没有
        target_names:标签名,回归数据集没有
大数据集:
    sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
        subset: 'train'或者'test','all',可选,选择要加载的数据集.
        训练集的“训练”,测试集的“测试”,两者的“全部”

清除数据:
    datasets.clear_data_home(data_home=None)
        清除目录下的数据

转换器:
fit_transform():输入数据直接转换

fit():输入数据,不做转换,但会计算一些平均值,方差等
transform():进行数据的转换
注意:fit_transform = fit + transform

估计器:是一类实现了算法的API
1、用于分类的估计器:
sklearn.neighbors k-近邻算法
sklearn.naive_bayes 贝叶斯
sklearn.linear_model.LogisticRegression 逻辑回归
2、用于回归的估计器:
sklearn.linear_model.LinearRegression 线性回归
sklearn.linear_model.Ridge 岭回归

三、损失函数

  • (1)什么是损失函数?

  • 损失函数就是用来表现预测与实际数据的差距程度--就是来衡量模型预测的好坏的函数

  • (2)具体的关系图

    关系图.png
  • 损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。

三、L1正则和L2正则的区别:

一、作用
L1和L2是正则化项,又叫做罚项,是为了限制模型的参数,防止模型过拟合而加在损失函数后面的一项。

二、区别:

1.L1是模型各个参数的绝对值之和。

L2是模型各个参数的平方和的开方值。

2.L1会趋向于产生少量的特征,而其他的特征都是0.

因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩阵

L2会选择更多的特征,这些特征都会接近于0。

最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化||w||时,就会使每一项趋近于0

三、几个具体的疑问?

1.为什么参数越小代表模型越简单?

越是复杂的模型,越是尝试对所有样本进行拟合,包括异常点。这就会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。

只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。

2.实现参数的稀疏有什么好处?

因为参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0.

3.L1范数和L2范数为什么可以避免过拟合?

加入正则化项就是在原来目标函数的基础上加入了约束。当目标函数的等高线和L1,L2范数函数第一次相交时,得到最优解。

 L1范数:

L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为0 ,产生稀疏权重矩阵,进而防止过拟合。

L2范数:

L2范数符合高斯分布,是完全可微的。和L1相比,图像上的棱角被圆滑了很多。一般最优值不会在坐标轴上出现。在最小化正则项时,可以是参数不断趋向于0.最后活的很小的参数。

假设要求的参数为θθ,hθ(x)hθ(x)是我们的假设函数,那么线性回归的代价函数如下:

image

那么在梯度下降法中,最终用于迭代计算参数θθ的迭代式为:

image

如果在原始代价函数之后添加L2正则化,则迭代公式会变成下面的样子:

image

每一次迭代,θj都要先乘以一个小于1的因子,从而使得θj不断减小,因此总得来看,θ是不断减小的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值