第四部分 预测性数据挖掘模型
回归问题:多元线性回归、多元非线性回归、广义线性回归、神经网络
分类问题:决策树、逻辑回归、支持向量机、组合算法
4.1朴素贝叶斯
似然概率/全概率
简单贝式网络Naïve Bayes接受类别型字段,数值型字段离散化为类别型变量或将连续变量以常态分配的方式估计其概率值
针对概率为0问题,拉普拉斯平滑(Laplace smoothing)
朴素贝叶斯概率为0的问题,数值型字段离散化为类别型变量。
贝叶斯网络打破变量独立假设,TAN模型一个输入属性除目标属性外最多只能有一个输入属性当Parent,Markov Blanket模型输入属性与目标属性地位相同可以互为Parent.
朴素贝叶斯,朴素含义假设输入字段独立,每个特征同等重要
4.2线性回归
线性回归,最小二乘法计算系数
皮尔森相关系数
回归模型效能评估
4.3决策树
ID3建模
建树:选择最有解释力度的变量,对每个变量选择最优分割点
剪数:前向剪枝:控制生成树的规模,后向剪枝:删除没有意义的分组
信息增益Information Gain
信息熵Entropy,衡量一个节点不纯度的指标
缺点:倾向选择水平数量较多的变量,输入变量必须是分类变量(连续变量必须离散化),不进行剪枝,噪声大
C4.5
增加连续变量二分法,信息增益率Gain Ratio
C5.0
增加分支度Information Value,可以处理数值型数据,纳入Bosst的方法,可以做组合模型
CART Classification and Regression Tree分类回归树,既可以完成分类任务,又可以作为回归模型。如果目标字段是类别型则建立分类树,数值型则建立回归树。采用Gini作为字段选择时的评估。建立二叉树
字段选择Gini Index
CHAID 字段选择卡方检验
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion='gini',
max_depth=3,
class_weight=None,
random_state=1234) # 支持计算Entropy和GINI
clf.fit(train_data, train_target)
决策树图形工具安装
安装graphviz及环境变量配置https://www.cnblogs.com/shuodehaoa/p/8667045.html
CART决策树算法(分类回归树算法),
决策树效果评估
import sklearn.metrics as metrics
print(metrics.classification_report(test_target, clf.predict(test_data)))
4.4神经网络
神经网络,对缺失值、离群值敏感
BP神经网络(多层感知机),神经元三个层次-输入层、隐藏层和输出层。神经元由上一层神经元与本层神经元交叉形成的神经键、权重加总(Weighted Sum)、常数项Bias以及激发函数(Activation Function)无限趋近于0和1
激发函数(Activation Function)又名S型函数Sigmoid Function或逻辑函数Logit Function,无限趋近于0和1
4.5逻辑回归
逻辑回归与神经网络的不同之处,需要挑选字段。
字段选择方式:前向递增法Forward-反复将贡献度最大的变量放入模型、后向递减法Backward-字段从多到少、逐步回归法Stepwise-字段数目既增加又减少。
4.6支持向量机
支持向量机SVM Support Vector Machine,根据核函数不同的选择,可以构建不同的模型。选择Sigmoid函数就变成神经网络。选择线性函数,SVM做的就是线性回归。可以解决分类与预测问题
其复杂度取决于支持向量的数目,而不是数据维度。出现过拟合的情况较少。
非线性转换SVM常用核函数Kernel Function
多项式转换Polynomial Kernel
高斯RBF转换Gaussian Radial Basis Function
Sigmoid转换Sigmoid Kernel
SMO序列最小最优化 Sequential Minimal Optimization
from sklearn import svm
svc_model = svm.SVC(kernel='linear', gamma=0.5, C=0.5,
probability=True).fit(train_data, train_target)
选择最优模型,estimator分类器,param_grid分类器参数
from sklearn.model_selection import ParameterGrid, GridSearchCV
kernel = ('linear', 'rbf')
gamma = np.arange(0.01, 1, 0.1)
C = np.arange(0.01, 1.0, 0.1)
grid = {'kernel': kernel, 'gamma': gamma, 'C': C}
svc_search = GridSearchCV(estimator=svm.SVC(), param_grid=grid, cv=3,scoring=’rou_auc’)
svc_search.fit(train_scaled, train_target)
svc_search.best_params_
4.7集成算法
集成法Ensemble Methods:训练数据上的集成-装袋法Bagging和提升法Boosting、输入变量上的集成-随机森林Random Forest
通过处理学习算法,在同一个训练数据集上多次执行算法可能得到不同的模型
装袋:随机森林、其他,有放回抽样
提升:Adaboost、GBDT、Boosted Tree、XGBoost。给每一个训练样本赋一个权值,而且可以在每一轮提升过程结束时自己调整权值。
XGBoost在GBDT基础上自剪枝的决策树,加入惩罚项
Boosting可以获得比bagging更高的准确率,容易过度拟合
from sklearn.ensemble import BaggingClassifier
# Default base estimator is decision tree.
bgc = BaggingClassifier()
随机森林
from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier()
rf.fit(X_train,y_train)
print(classification_report(y_test,rf.predict(X_test)))
可查看特征相对重要性
Rf.feature_importances_
Adaboost
from sklearn.ensemble import AdaBoostClassifier
# Default base estimator is decision tree.
abc = AdaBoostClassifier()
abc.fit(X_train, y_train)
print(classification_report(y_test, abc.predict(X_test)))
GBDT
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(loss='deviance')
gbc.fit(X_train, y_train)
print(classification_report(y_test, gbc.predict(X_test)))
XGBoost
from xgboost.sklearn import XGBClassifier
xgb = XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100)
xgb.fit(X_train, y_train,
eval_set=[[X_test, y_test],],
eval_metric='auc',
early_stopping_rounds=3,
verbose=False)
print(xgb.evals_result())
print('best_score:', xgb.best_score)
print('best_iteration:', xgb.best_iteration)