常用机器学习算法
常用预测(分类,回归)模型:
分类算法: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比赛中使用很多。
网友评论