美文网首页机器学习之路
常用机器学习算法

常用机器学习算法

作者: Nefelibatas | 来源:发表于2022-02-13 09:55 被阅读0次

    常用机器学习算法

    常用预测(分类,回归)模型:

    分类算法:LR , SVM,KNN

    矩阵分解:FunkSVD,BiasSVD,SVD++

    FM模型:FM, FFM, DeepFM, NFM,AFM

    树模型:GBDT, XGBoost, LightGBM, CatBoost,NGBoost

    Attention模型:DIN, DIEN, DSIN

    LR工具

    from sklearn.linear_model.logistic import LogisticRegression
    

    参数

    • penalty,惩罚项,正则化参数,防止过拟合,l1或l2,默认为l2

    • C,正则化系数λ的倒数,float类型,默认为1.0

    • solver,损失函数优化方法,liblinear(默认),lbfgs, newton-cg,sag

    • random_state,随机数种子

    • max_iter,算法收敛的最大迭代次数,默认为100

    • tol=0.0001 : 优化算法停止条件,迭代前后函数差小于tol则终止

    • verbose=0 : 日志冗长度int:冗长度;0:不输出训练过程;1:偶尔输出; >1:对每个子模型都输出

    • n_jobs=1 : 并行数,int:个数;-1:跟CPU核数一致;1:默认值

    常用方法

    fit(X, y, sample_weight=None)
    
    fit_transform(X, y=None, **fit_params)
    
    predict(X) # 用来预测样本,也就是分类
    
    predict_proba(X) # 输出分类概率。返回每种类别的概率,按照分类类别顺序给出。
    
    score(X, y, sample_weight=None) # 返回给定测试集合的平均准确率(mean accuracy)
    

    模型参数配置

    model.fit(X_train, y_train)
    predict = model.predict_proba(test)[:, 1]
    test['Attrition']=predict
    # 转化为二分类输出
    test['Attrition']=test['Attrition'].map(lambda x:1 if x>=0.5 else 0)
    test[['Attrition']].to_csv('submit_lr.csv')
    

    SVM

    sklearn中支持向量分类主要有三种方法:SVC、NuSVC、非线性

    LinearSVC(解决线性)

    sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, 
    
    probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, 
    
    max_iter=-1, decision_function_shape='ovr', random_state=None) </pre>
    

    NuSVC

    sklearn.svm.NuSVC(nu=0.5, kernel='rbf', degree=3, gamma='auto', coef0=0.0, 
    
    shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, 
    
    verbose=False, max_iter=-1, decision_function_shape='ovr', random_state=None) 
    

    非线性

    sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0, 
    
    multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, 
    
    random_state=None, max_iter=1000)
    

    常用参数:

    C,惩罚系数,类似于LR中的正则化系数,C越大惩罚越大

    nu,代表训练集训练的错误率的上限(用于NuSVC)

    kernel,核函数类型,RBF, Linear, Poly, Sigmoid,precomputed,默认为RBF径向基核(高斯核函数)

    gamma,核函数系数,默认为auto

    degree,当指定kernel为'poly'时,表示选择的多项式的最高次数,默认为三次多项式 probability,是否使用概率估计

    shrinking,是否进行启发式,SVM只用少量训练样本进行计算

    penalty,正则化参数,L1和L2两种参数可选,仅LinearSVC有

    loss,损失函数,有‘hinge’和‘squared_hinge’两种可选,前者又称L1损失,后者称为L2损失

    tol: 残差收敛条件,默认是0.0001,与LR中的一致

    SVM工具

    概述

    SVC,Support Vector Classification,支持向量机用于分类

    SVR,Support Vector Regression,支持向量机用于回归

    sklearn中支持向量分类主要有三种方法:SVC、NuSVC、LinearSVC

    基于libsvm工具包实现,台湾大学林智仁教授在2001年开发的一个简单易用的SVM工具包

    SVC,C-Support Vector Classification,支持向量分类

    NuSVC,Nu-Support Vector Classification,核支持向量分类,和SVC类似,不同的是可以使用参数来控制支持向量的个数

    LinearSVC,Linear Support Vector Classification

    线性支持向量分类,使用的核函数是linear

    libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核

    Kernel 核的选择技巧的:

    • 如果样本数量 < 特征数:

      • 方法1:简单的使用线性核就可以,不用选择非线性核

      • 方法2:可以先对数据进行降维,然后使用非线性核

    • 如果样本数量 >= 特征数

      • 可以使用非线性核,将样本映射到更高维度,可以得到比较好的结果

    SVM思想

    一些线性不可分的问题可能是非线性可分的,也就是在高维空间中存在分离超平面(separating hyperplane)

    使用非线性函数从原始的特征空间映射至更高维的空间,转化为线性可分问题。

    image-20220212162450722.png

    模型参数配置

    model = LinearSVC(max_iter=1000,
     random_state=33,
     verbose=True,
     )
    model.fit(X_train, y_train)
    predict = model.predict(test)
    print(predict)
    test1['Attrition']=predict
    test1[['Attrition']].to_csv('submit_svc.csv')
    

    总结

    每种模型都有适用的场景

    可以使用LR模型作为预测的Baseline

    FM衍生模型在推荐系统,尤其是CTR预估中有广泛应用,弥补了LR模型的不足(需要人工组合特征,耗费大量时间和人力)

    Attention机制,对于Diversity多样性的情况,Attention机制可以提升效率,并且得出更好的结果

    Tree Ensemble模型,比如GBDT,使用广泛,因为训练模型更可控

    对于 LR 模型,如果欠拟合,需要增加feature,才能提高准确率。

    而对于 tree-ensemble 来说,解决方法是训练更多的决策树 tree,Kaggle比赛中使用很多。

    相关文章

      网友评论

        本文标题:常用机器学习算法

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