sklearn决策树实战案例
程序员文章站
2024-02-03 21:05:16
...
sklearn决策树实战案例
#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('seaborn')
plt.rcParams['axes.unicode_minus']=False #设置显示中文后,负号显示受影响。解决坐标轴上乱码问题
plt.rcParams['font.family'] = ['Arial Unicode MS'] #mac用解决中文显示问题
读入数据train.csv
df=pd.read_csv(r"/Users/liu*g/Desktop/python/机器学习/练习/train.csv")
df
# 查看数据的信息
df.info
# 提取特征和标签
df1=df.drop(['客户ID','y'],axis=1)
df1
X=df1
X
y=df['y']
# 查看样本是否均衡
y.value_counts()
划分测试集和训练集
# 测试集占0.2, 随机数种子666
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
# 实例化一个决策树分类器对象
# class_weight这个参数设置成"balanced", random_state设置为25
from sklearn.tree import DecisionTreeClassifier
dct=DecisionTreeClassifier(random_state=25,class_weight='balanced')
# 训练模型
dct.fit(X_train,y_train)
# 查看模型在测试集上准确率
dct.score(X_test,y_test)
# 使用网格搜索进行调参
from sklearn.model_selection import GridSearchCV #导入网格搜索,帮助调参选取参数最优值
import numpy as np
# # parameters本质是一串参数和用网格搜索来搜索的参数取值范围,由
# #于是对多个参数同时进行搜索所以要把这些参数和参数取值范围打包成字典
parameters = { 'splitter':('best','random')
,'criterion':("gini","entropy")
,"max_depth":list(range(1, 10))
,'min_samples_leaf':list(range(5, 30, 5))
,'min_impurity_decrease':list(np.linspace(0,0.5,10)) #限制父节点和子节点之间的信息增益
}
clf = DecisionTreeClassifier(class_weight='balanced', random_state=25)
# #首先实例化模型
GS = GridSearchCV(clf,parameters, cv=5)
# #进行网格搜索,GridSearchCV同时满足fit,score和交叉验证三种功能,parameters要进行哪些参数的调参,还要进行5折交叉验证
GS.fit(X_train,y_train)
# 最佳参数组合
GS.best_params_
# 交叉验证最好的得分
GS.best_score_
最后再用最好的组合建模。