从本节课开始,我们将介绍经典机器学习领域中最重要的一类有监督学习算法——树模型(决策树)。
可此前的聚类算法类似,树模型也同样不是一个模型,而是一类模型的概称。树模型不仅运算效率高、模型判别能力强、而且原理简单过程清晰、可解释性强,是机器学习领域内为数不多的“白箱模型”。并且就树模型本身的功能来说,除了能够同时进行分类和回归预测外,还能够产出包括特征重要性、连续变量分箱指标等重要附加结论,而在集成学习中,最为常用的基础分类器也正是树模型。正是这些优势,使得树模型成为目前机器学习领域最为重要的模型之一。
# 科学计算模块
import numpy as np
import pandas as pd
# 绘图模块
import matplotlib as mpl
import matplotlib.pyplot as plt
# 自定义模块
from ML_basic_function import *
# Scikit-Learn相关模块
# 评估器类
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
# 实用函数
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 数据准备
from sklearn.datasets import load_iris
在Lesson 6.5节中,我们曾围绕鸢尾花数据集构建了多分类逻辑回归模型并且采用网格搜索对其进行最优超参数搜索,其基本过程如下:
# 数据准备
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=24)
# 模型训练
# 实例化模型
clf = LogisticRegression(max_iter=int(1e6), solver='saga')
# 构建参数空间
param_grid_simple = {'penalty': ['l1', 'l2'],
'C': [1, 0.5, 0.1, 0.05, 0.01]}
# 构建网格搜索评估器
search = GridSearchCV(estimator=clf,
param_grid=param_grid_simple)
# 模型训练
search.fit(X_train, y_train)
GridSearchCV(estimator=LogisticRegression(max_iter=1000000, solver='saga'),
param_grid={'C': [1, 0.5, 0.1, 0.05, 0.01],
'penalty': ['l1', 'l2']})
GridSearchCV(estimator=LogisticRegression(max_iter=1000000, solver='saga'),
param_grid={'C': [1, 0.5, 0.1, 0.05, 0.01],
'penalty': ['l1', 'l2']})
search.best_params_
{'C': 1, 'penalty': 'l1'}
search.best_estimator_.coef_
array([[ 0. , 0. , -3.47337669, 0. ],
[ 0. , 0. , 0. , 0. ],
[-0.55511761, -0.34237661, 3.03227709, 4.12148646]])
我们会发现第三个特征对辨别鸢尾花的种类至关重要