机器学习决策树
- 开源代码
- 2025-09-21 19:36:02

一、香农公式
熵:
信息增益:
信息增益=信息熵-条件熵
前者是初始信息熵大小,后者是因为条件加入后带来的确定性增加
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
信息增益越大说明影响越大
二、代码 """ 决策树对泰坦尼克号进行预测生死 :return: None """ # 获取数据 titan = pd.read_csv("./data/titanic.txt") titan.info() # info()查看数据信息,包括每列的类型,非空值个数,内存占用等 # 处理数据,找出特征值和目标值 x = titan[['pclass', 'age', 'sex']] y = titan['survived'] print(x.info()) # 用来判断是否有空值 x.describe(include='all') # 用来查看数据的描述性统计信息 # 一定要进行缺失值处理,填为均值 mean=x['age'].mean() print(mean) x.loc[:,'age']=x.loc[:,'age'].fillna(mean) # 分割数据集到训练集合测试集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=4) print(x_train.head()) x_train.to_dict(orient="records") #把df变为列表套字典,后面方便变成one_hot编码 # 进行处理(特征工程)特征-》类别-》one_hot编码 dict = DictVectorizer(sparse=False) # sparse=False表示不用稀疏矩阵,用numpy数组 # 这一步是对字典进行特征抽取,to_dict可以把df变为字典,records代表列名变为键 x_train = dict.fit_transform(x_train.to_dict(orient="records")) print(type(x_train)) print(dict.get_feature_names_out()) print('-' * 50) x_test = dict.transform(x_test.to_dict(orient="records")) print(x_train) # 用决策树进行预测,修改max_depth试试,修改criterion为entropy #树过于复杂,就会产生过拟合 dec = DecisionTreeClassifier() #训练 dec.fit(x_train, y_train) # 预测准确率 print("预测的准确率:", dec.score(x_test, y_test)) # 导出决策树的结构 export_graphviz(dec, out_file="tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'female', 'male'])