1. 数据集鸢尾花分析
2.用决策树分析
2.1 导包
基于Cart树的实现 只划分二叉树
from sklearn.tree import DecisionTreeClassifier
DecisionTreeClassifier()
max_depth# 核心参数 可以多次根据同一属性划分,比如根据25岁划分,再根据年龄15岁划分,可以无限的深,约深,约容易过拟合。
如果根据15划分,只有2个人,再根据10划分没有意义,可以进行剪枝
2.2 导入鸢尾花数据
from sklearn.datasets import load_iris
iris = load_iris()data = iris.data
target = iris.target
feature_names = iris.feature_names
class_names = iris.target_names
绘图展示数据分布
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set()
sns.scatterplot(x=data[:,0], y=data[:,1], hue=target)
将标签加到数据集里并展现
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
整合鸢尾花数据集
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
iris_df = DataFrame(data=data, columns=feature_names)
iris_df['cate'] = Series(target).map(lambda x:class_names[x])
绘图展示
sns.pairplot(data=iris_df, hue='cate') # 绘制成对图像
斜对角图像是同一个特征和同一个特征,所以为计数,直方图。
2.3 获取特征向量和标签
X = iris_df.iloc[:,:2].copy()
y = iris_df.iloc[:,-1].copy()
2.4 建模分析
2.4.1 KNN建模
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() # 构建算法对象knn.fit(X, y) # 训练算法对象
knn.score(X, y) # 算法评分 0.8333333333333334
2.4.2 决策树建模
dt = DecisionTreeClassifier()
dt.fit(X, y)
dt.score(X, y) # 0.9266666666666666
dt2 = DecisionTreeClassifier()
dt2.fit(data, target) # 选取所有特征训练
dt2.score(data, target) # 1.0
2.4.3 绘制决策边界
def show_edage(model, X, y):
xmin, xmax = X.values[:,0].min(), X.values[:,0].max()
ymin, ymax = X.values[:,1].min(), X.values[:,1].max()
a = np.linspace(xmin, xmax, 200)
b = np.linspace(ymin, ymax, 200)
xx, yy = np.meshgrid(a, b)
X_test = np.c_[xx.ravel(), yy.ravel()]
# 与上面的代码等价
# X_test = np.concatenate((xx.reshape(-1,1), yy.reshape(-1,1)), axis=1)
model.fit(X, y)
y_ = model.predict(X_test)
plt.scatter(X_test[:,0], X_test[:,1], c=y_, cmap=plt.cm.Blues_r)
plt.scatter(X.values[:,0], X.values[:,1], c=y, cmap=plt.cm.RdBu_r)
plt.xlabel(X.columns[0])
plt.ylabel(X.columns[1])
plt.show()
knn决策边界
knn = KNeighborsClassifier()
show_edage(knn, X, target)
决策树边界
dt = DecisionTreeClassifier()
show_edage(dt, X, target)
增加参数,深度为2
dt1 = DecisionTreeClassifier(max_depth=2)
show_edage(dt1, X, target)
2.4.4 决策树可视化
import graphviz
from sklearn import tree
data.shape # (150, 4)
可视化
dot = tree.export_graphviz(dt1, out_file=None,
feature_names=X.columns,
class_names=class_names, filled=True)
graphviz.Source(dot)
完全生长的树是过拟合的树,它的应用场景是在森林中使用
dot = tree.export_graphviz(dt, out_file=None,
feature_names=X.columns,
class_names=class_names, filled=True)
graphviz.Source(dot)