决策树.py
from sklearn.tree import DecisionTreeClassifier #创建分类器对象 tree=DecisionTreeClassifier(criterion="entropy") #训练数据fit tree.fit([[0],[1],[2],[3]],["a","a","b","c"]) #预测新数据 target=tree.predict([[2]]) #模型评估,打分,验证方法,评估方式 print(target) print(tree.score([[2]],target))
决策树–鸢尾花.py
#用决策树对鸢尾花进行分类
from sklearn.tree import DecisionTreeClassifier,plot_tree
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
#获取数据集
iris=load_iris()
print(iris)
#划分数据集(传入特征值,目标值,划分的比例以及随机种子)
X_train, X_test, y_train, y_test=train_test_split(iris.data,iris.target,test_size=0.3,random_state=30)
#创建决策树预估器(利用决策树对象学习训练集,预测测试集)
tree=DecisionTreeClassifier(criterion="gini",max_depth=2)
tree.fit(X_train,y_train)
target=tree.predict(X_test)
#模型评估,(使用测试集中特征和目标对决策树打分)
print("预测结果:",target)
print("对比",target==y_test)
print("打分结果:",tree.score(X_test,y_test))
plt.figure(figsize=(12,11),dpi=80)
plot_tree(tree,feature_names=iris.feature_names)
plt.show()
决策树–鸢尾花–网格交叉搜索.py
#用决策树对鸢尾花进行分类
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split,GridSearchCV
#获取数据集
iris=load_iris()
print(iris)
#划分数据集(传入特征值,目标值,划分的比例以及随机种子)
X_train, X_test, y_train, y_test=train_test_split(iris.data,iris.target,test_size=0.3,random_state=30)
#创建决策树预估器(利用决策树对象学习训练集,预测测试集)
tree=DecisionTreeClassifier(criterion="gini",max_depth=2)
#创建网格交叉搜索的对象,传入分类器对象,param_grid用于指定分类器对象tree可以调整的参数,字典格式
gsc=GridSearchCV(tree,param_grid={"criterion":["gini","entropy","cart"],'max_depth':range(1,21),"min_samples_split":range(1,11)})
#学习、训练数据
gsc.fit(X_train,y_train)
#预测
target=gsc.predict(X_test)
#模型评估,(使用测试集中特征和目标对决策树打分)
print("预测结果:",target)
print("对比结果:",target==y_test)
print("打分结果:",gsc.score(X_test,y_test))
print("最优参数:",gsc.best_params_)
print("最优分数:",gsc.best_score_)
print("最优分类器:",gsc.best_estimator_)
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import pydotplus
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#选取一些特征作为我们划分的依据
x = titanic[['pclass', 'age', 'sex']]
y = titanic['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)
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()
dec.fit(x_train,y_train)
print("预测的准确率:",dec.score(x_test,y_test))
#导出决策树的结构
# export_graphviz(dec,out_file='./tree1.pdf',feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', 'sex=male'])
dot_data = export_graphviz(dec, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("tree2.pdf")



