Python学习笔记--基础分类算法2

决策树之信息论

程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。
信息熵:信息和消除不确定性相关。
决策树的划分依据:信息增益–得知一个特征条件之后,减少的信息熵的大小。
常见决策树使用的算法:
ID3 信息增益最大的准则
C4.5 信息增益比 最大的准则
CART:
回归树:平方误差 最小
分类树:基尼系数 最小的准则 在sklearn中可以选择划分的原则 基尼系数划分更加仔细
sklearn决策树API
class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None)
决策树分类器
criterion:默认是‘gini’系数,也可以选择信息增益的熵‘entropy’
max_depth:树的深度大小
random_state:随机数种子
method:
decision_path:返回决策树的路径

def decision():
    '''决策树对泰坦尼克号进行预测生死:
    return:None'''
    titan=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
    ##处理数据,找出特征值和目标值
    x=titan[['pclass','age','sex']]
    y=titan['survived']
    print(x)
    ##缺失值处理
    x['age'].fillna(x['age'].mean(),inplace=True)
    ##分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    ##进行处理(特征工程) 特征-》类别one_hot编码
    dict=DictVectorizer(sparse=False)
    ##转换成字典,fit_transform默认为字典的特征抽取
    x_train=dict.fit_transform(x_train.to_dict(orient='records'))
    print(dict.get_feature_names())
    x_test=dict.fit_transform(x_test.to_dict(orient='records'))
    print(x_train)
    ##用决策树进行预测
    dec=DecisionTreeClassifier(max_depth=5)
    dec.fit(x_train,y_train)
    ##预测准确率
    print('预测的准确率:'dec.score(c_test,y_test))
    
    return None



if __name__ == "__main__":
    decision()

决策树可视化
1.sklearn.tree.export_graphivz()该函数能够到处DOT格式
tree.export_graphviz(estimator,out_file=‘tree.dot’,feature_names=[‘,’])
2.工具:(能够将dot文件转换为pdf、png)
安装graphviz
ubuntu:sudo apt-get install graphviz
3.运行命令
然后我们运行这个命令
¥dot-Tpngtree.dot-otree.png

随机森林

集成学习方法
集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器、模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此由于任何一个单分类的做出预测。
随机森林:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
随机森林建立多个决策树过程:
单个树的建立过程:
1.随机在N个样本当中选择一个样本,重复N次 , 样本有可能重复。
2.随机在M个特征当中选出m个特征
随机森林API
class sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,bootstrop=True,random=None)
随机森林分类器
n_estimators: integer,optional(default=10)森林里的树木数量 120 200 300 500 800 1200 超参数1(常用的值)
criteria:string,可选(default=‘gini’)分割特征的测量方法
max_depth:integer或none,可选 树的最大深度 5,8,15,25,30 超参数2
max_features=‘auto’,每个决策树的最大特征数量
If ‘auto’,then ‘max_features=sqrt(n_features)’
If ‘sqrt’,then ‘max_features=sqrt(n_features)’ (same as ‘auto’)
If ‘log2’,then ‘max_features=log2(n_features)’
If ‘None’,then 'max_features=n_features
bootstrap:boolean,optional(default=True)是否在构建树时使用放回抽样

def decision():
    '''决策树对泰坦尼克号进行预测生死:
    return:None'''
    titan=pd.read_csv('./train.csv')
    ##处理数据,找出特征值和目标值
    print(titan.head())
    x=titan[['Pclass','Age','Sex']]
    y=titan['Survived']
    print(x)
    ##缺失值处理
    x['Age'].fillna(x['Age'].mean(),inplace=True)

    ##分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    ##进行处理(特征工程) 特征-》类别one_hot编码
    dict=DictVectorizer(sparse=False)
    ##转换成字典,fit_transform默认为字典的特征抽取
    x_train=dict.fit_transform(x_train.to_dict(orient='records'))
    print(dict.get_feature_names_out())
    x_test=dict.fit_transform(x_test.to_dict(orient='records'))
    # print(x_train)
    # ##用决策树进行预测
    # dec=DecisionTreeClassifier(max_depth=5)
    # dec.fit(x_train,y_train)
    # ##预测准确率
    # print('预测的准确率:',dec.score(x_test,y_test))
    # ##导出决策树的结构
    # #export_graphviz(dec, out_file="./tree.dot", feature_names=['年龄', 'Pclass=1st', 'Pclass=2nd', 'Pclass=3rd', '女性', '男性'])

    #随机森林进行预测(超参数调优)
    rf=RandomForestClassifier()
    ##网格搜索与交叉验证
    param={'n_estimators':[120,200,300,500,800,1200],'max_depth':[5,8,15,25,30]}
    gc=GridSearchCV(rf,param_grid=param,cv=2)
    gc.fit(x_train,y_train)
    print('准确率:',gc.score(x_test,y_test))
    print('查看选择的参数模型:',gc.best_params_)

    return None



if __name__ == "__main__":
    decision()

优点:
能够有效运行在大数据上
具有极好的准确率
能够处理高维特征的输入样本,不需要降维
能够评估各个特征在分类问题上的重要性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值