需要源码请点赞关注收藏后评论区留言私信~~~
在生活中人们经常应用决策树的思想来做决定
分类的建模过程与上面做决定的过程相反,事先不知道人们的决策思路,需要通过人们已经做出的大量决定来“揣摩”出其决策思路,也就是通过大量数据来归纳道理。
当影响决策的因素较少时,人们可以直观地从训练样本中推测出相亲决策思路,从而了解此人的想法。
当样本和特征数量较多时,且训练样本可能出现冲突,人就难以胜任建立模型的任务。此时,一般要按一定算法由计算机来自动完成归纳,从而建立起可用来预测的模型,并用该模型来预测测试样本,从而筛选相亲对象。
决策树基本思想
决策树模型是一种对测试样本进行分类的树形结构,该结构由结点(node)和有向边(directed edge)组成
内部节点(internal node)表示对样本的一个特征进行测试
叶节点(leaf node)表示样本的一个分类
二叉树:只对一个特征的1个具体值进行测试,只有正(大于等于)或负(小于)2个输出
多叉树:对一个特征的多个具体值进行测试,将产生多个输出
使用决策树进行决策的过程是从根节点开始,依次测试样本相应的特征,并按照其值选择输出分支,直到到达叶子节点,然后将叶子节点存放的类别作为决策结果
决策树建立与应用
找分裂点是算法的关键,习惯上称为样本集分裂,依其解决方法可将决策树算法分为ID3、C4.5、CART等算法。 依据的指标分为信息增益(Information Gain)、增益率(gain ratio)和基尼指数(Gini Index)等,它们都是以信息论为理论基础,它们的目标都是建立层次尽可能少的决策树。
决策树模型还可以用于回归问题。树模型解决回归问题的基本思想是将样本空间切分为多个子空间,在每个子空间中单独建立回归模型,因此,基于树的回归模型属于局部回归模型。与局部加权线性回归模型和K近邻法不同的是,基于树的回归模型事先会生成固定的模型,不需要在每次预测时都计算每个训练样本的权值,因此效率相对较高。
sklearn中的树回归算法在tree模块中的DecisionTreeRegressor类中实现。
在相亲决策中应用如下
可以看出明显收入在相亲中还是很重要的 还是要多赚钱...
部分代码如下
from sklearn import tree clf = tree.DecisionTreeClassifier() # 实例化 clf = clf.fit(blind_date_X, blind_date_y) # 建树 tree.plot_tree(clf) # 画出树结构 print(clf.feature_importances_) # 给出特征的重要度
随机森林
随机森林算法的基本思想是从样本集中有放回地重复随机抽样生成新的样本集合,然后无放回地随机选择若干特征生成一颗决策树,若干颗决策树组成随机森林,在预测分类时,将测试样本交由每个决策树判断,并根据每颗树的结果投票决定最终分类。
随机森林算法具有准确率高、能够处理高维数据和大数据集、能够评估各特征的重要性等优势,在工程实践和各类机器学习竞赛中得到了广泛的应用。
随机森林的方法代码如下
class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None) apply(self, X) decision_path(self, X) fit(self, X, y[, sample_weight]) get_params(self[, deep]) predict(self, X) predict_log_proba(self, X) predict_proba(self, X) score(self, X, y[, sample_weight]) set_params(self, \*\*params)
创作不易 觉得有帮助请点赞关注收藏~~~