美文网首页
(算法必会流程和必备知识)

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

作者: 羽天驿 | 来源:发表于2020-04-06 16:10 被阅读0次

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

    图片.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不断减小,因此总得来看,θ是不断减小的。

    相关文章

      网友评论

          本文标题:(算法必会流程和必备知识)

          本文链接:https://www.haomeiwen.com/subject/gcwuuhtx.html