如何使用Python中的决策树进行数据降维
决策树常见作为分类或回归模型,在机器学习中有广泛应用。除此之外,决策树还可用于特征选择和数据降维。
因为决策树通过选择最重要的特征来拆分数据集,因此可以通过观察该过程来确定哪些特征对目标变量贡献最大,提供有价值的信息,进而选取最有意义的特征。
下面演示一个数据降维的例子,使用决策树来挑选最有意义的特征变量。
我们将使用鸢尾花数据集作为范例,这个数据集中包含了三个类别的鸢尾花,分别是setosa(山鸢尾)、versicolor(杂色鸢尾)、virginica(维吉尼亚鸢尾)。每个样本包含四个特征,包括花萼长度、花萼宽度、花瓣长度、花瓣宽度。
首先,我们需要导入需要用到的库。代码如下:
import numpy as np import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn import metrics
接着,我们需要加载数据集并预处理数据。代码如下:
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'] iris_data = pd.read_csv(url, header=None, names=col_names) X = iris_data.drop('class', axis=1) y = iris_data['class']
接下来,我们将数据集分成训练集和测试集。代码如下:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
现在,我们可以创建一个决策树分类器。代码如下:
clf = DecisionTreeClassifier() clf = clf.fit(X_train,y_train)
接着,我们可以用训练好的模型预测测试集。代码如下:
y_pred = clf.predict(X_test)
最后,我们可以使用sklearn库中的特性重要性(feature importance)来确定最有意义的特征变量。代码如下:
importance = clf.feature_importances_ for i,v in enumerate(importance): print('Feature: %0d, Score: %.5f' % (i,v))
通过以上代码,我们可以得到每个特征变量的得分,这些得分给出了特征变量的重要性程度。在这个例子中,第三个特征变量(花瓣长度)被认为是最有价值的特征。
此外,我们还可以通过可视化来更直观地查看特征变量的重要性。代码如下:
from sklearn.tree import plot_tree import matplotlib.pyplot as plt plt.figure(figsize=(12,6)) plot_tree(clf,feature_names=col_names[:-1],class_names=clf.classes_,filled=True,fontsize=12) plt.show()
运行上述代码,我们可以看到如下的决策树可视化图表:
根据这个图表,我们可以看到第三个特征变量(花瓣长度)首先被用作最重要的变量来拆分数据集。
相关文章