决策树算法

决策树算法

- 检查是否存在缺失数据

def queshi(datafile = 'Data/Decision_tree/HR.csv'):
    '''
    导入数据并查看是否存在缺失值
    '''
    import pandas as pd
    df = pd.read_csv(datafile, index_col=None)
    # 检测是否有缺失数据
    queshi = df.isnull().any()
    queshi = queshi.tolist()
    return (queshi)

- 模型训练

def xunlian(modelpath = 'pythonmodel/clf.pkl',datafile = 'Data/Decision_tree/HR.csv',catclo = ["sales","salary"],outclo = 'left'):
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import roc_auc_score
    df = pd.read_csv(datafile, index_col=None)

    #分类数据转换成数字
    for i in catclo:
        df[i] = df[i].astype('category')
        df[i] = df[i].cat.codes
        #print(df)
    target_name = outclo
    X = df.drop(outclo, axis=1)
    y = df[target_name]
    #划分训练集和测试集
    
    #将数据分成训练集和测试集
    #stratify 参数的作用是在训练集和测试集中,不同标签所占比例相同,即原数据集中比例是多少,训练集和测试集中比例也为多少。
    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.15, random_state=123, stratify=y)

    clf = DecisionTreeClassifier(
    criterion='entropy',
    min_weight_fraction_leaf=0.01
    )
    clf = clf.fit(X_train,y_train)

    #检查分类器的准确率
    clf_roc_auc = roc_auc_score(y_test, clf.predict(X_test))
    zhunquelv = "决策树 AUC = %2.2f" % clf_roc_auc

    #模型保存和读取
    from sklearn.externals import joblib #jbolib模块
    #保存Model(注:pythonmodel文件夹要预先建立,否则会报错)
    joblib.dump(clf, modelpath)
    return zhunquelv

- 图像展示决策树各数据特征

def tezheng(modelpath = 'pythonmodel/clf.pkl',datafile = 'Data/Decision_tree/HR.csv',col = 'left',jpgname = 'TREE.png'):
    import pandas as pd
    from sklearn.externals import joblib #jbolib模块
    import numpy as np
    import matplotlib.pyplot as plt
    df = pd.read_csv(datafile, index_col=None)
    clfload = joblib.load(modelpath)
    '''
    可以通过决策树来分析出不同特征的重要性,进而帮助做出决定。
    '''
    #特征值的权重
    importances = clfload.feature_importances_
    #列名
    feat_names = df.drop([col],axis=1).columns
    
    
    indices = np.argsort(importances)[::-1]
    plt.figure(figsize=(12,6))
    plt.title("Feature importances by Decision Tree")
    plt.bar(range(len(indices)), importances[indices], color='lightblue',  align="center")
    plt.step(range(len(indices)), np.cumsum(importances[indices]), where='mid', label='Cumulative')
    plt.xticks(range(len(indices)), feat_names[indices], rotation='vertical',fontsize=14)
    plt.xlim([-1, len(indices)])
    plt.savefig(jpgname)
    plt.show()

- 载入模型,取指定数据文件预测值

def mainfromfile(modelpath = 'pythonmodel/clf.pkl',datafile = 'Data/Decision_tree/HR2.csv',col = 'left',begin = 3242,end = 3244):
    from sklearn.externals import joblib #jbolib模块
    import pandas as pd
    clfload = joblib.load(modelpath)
    df = pd.read_csv(datafile, index_col=None)
    df1 = df.drop(col, axis=1)
    xxx = df1.iloc[begin:end,1:]
    #测试集预测读取后的Model
    y_feature = clfload.predict(xxx)
    return y_feature

- 载入模型,传入数值后返回预测值

def mainfromdata(modelpath = 'pythonmodel/clf.pkl',data = [[0.38,0.53,2,157,3,0,0,7,1]]):
    from sklearn.externals import joblib #jbolib模块
    import pandas as pd
    clfload = joblib.load(modelpath)
    data = pd.DataFrame(data)
    #测试集预测读取后的Model
    y_feature = clfload.predict(data)
    return y_feature
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值