决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,就是利用这类结构分割数据的一种分类学习方法。是帮助我们进行高效决策分析的一种方法。
sklearn.tree.DecisionTreeClassifier(criterion="gini",max_depth=None,random_state=None)
- 决策树分类器
- criterion:默认是"gini",也可以选择信息增益的熵“entropy”
- max_depth:决策树的深度大小(不能太大,防止过拟合)
- random_state:随机树种子
from sklearn.datasets import load_iris,fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
import ssl
def decision_iris():
"""
1)、获取数据
2)、数据划分
3)、数据特征提取(该步骤在本例中不需要)
4)、使用决策树预估器进行分类
5)、模型的选择与调优
6)、模型评价
:return:
"""
# 1)、获取数据
iris = load_iris()
# 2)、数据划分
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target)
# 3)、使用决策树预估器进行分类
estimator = DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train,y_train)
# 4)、模型评价
"""评估方法1:直接比对真实值和预测值"""
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
"""评估方法2:计算准确率"""
score = estimator.score(x_test, y_test) # 相当于计算了预估器的准确率,因为这里本来是完全一致的
print("准确率:\n", score)
return
if __name__ == '__main__':
# knn_iris()
ssl._create_default_https_context = ssl._create_unverified_context
# nb_news()
decision_iris()
准确率:
0.9210526315789473
可以可以将该结果与KNN算法进行比较
sklearn.tree.export_graphviz()# 该函数能够导出dot格式
- tree.export_graphviz(estimator,out_file="tree.dot",feature_names=["age","pclass "])
# 可视化决策树,直接把这一部分加入到decision_iris()中即可
export_graphviz(estimator, out_file="iris_tree.dot")
运行结果如图
ps:在企业重要决策中,由于决策树有很好的分析能力,在决策过程中应用较多,可以选择特征
流程分析
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
def titanic_demo():
# 1)、获取数据
titanic = pd.read_csv("/Users/dengzhao/Desktop/数据集/titanic/train.csv")
# 2)、筛选特征值和目标值
x = titanic[["Pclass","Age","Sex"]]
y = titanic["Survived"]
# 3)、缺失值处理
x["Age"].fillna(x["Age"].mean(),inplace=True)
# 4、转换成字典
x = x.to_dict(orient="records")
# 5)、数据集的划分
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22)# random_state随机数种子
# 6)、字典特征抽取
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 7)、转换器
estimator = DecisionTreeClassifier(criterion="entropy",max_depth=8)
estimator.fit(x_train, y_train)
# 8)、模型评价
"""评估方法1:直接比对真实值和预测值"""
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
"""评估方法2:计算准确率"""
score = estimator.score(x_test, y_test) # 相当于计算了预估器的准确率,因为这里本来是完全一致的
print("准确率:\n", score)
# 9)、可视化决策树
export_graphviz(estimator, out_file="titanic_tree.dot",feature_names=transfer.get_feature_names())
return
if __name__ == '__main__':
titanic_demo()