如何在Python中将Sklearn DIGITS数据集转换为2和3特征数据集?
在机器学习领域,特征选择是非常重要的一环。在一些高维度的数据中,我们需要选取最为关键的特征值来进行分析,否则会出现传统过拟合或偏差问题。本文将介绍如何将Sklearn DIGITS数据集转换为2和3特征数据集,帮助初学者更好地理解特征工程。
Sklearn DIGITS数据集介绍
Sklearn DIGITS 数据集是一个手写数字的数据集,其样本形式如下:
from sklearn import datasets
digits = datasets.load_digits()
print(digits.data[0])
# [0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5. 0. 0. 3. 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8. 8. 0. 0. 5. 8. 0. 0. 9. 8. 0. 0. 4. 11. 0. 1. 12. 7. 0. 0. 2. 14. 5. 10. 12. 0. 0. 0. 0. 6. 13. 10. 0. 0.]
可以看到,每个样本数据都包含了64个特征值,代表了图像的像素点值。为了简化特征工程,我们将其转化为仅包含2和3两个数字作为特征值的数据集。
数据集处理
首先,我们需要将Sklearn DIGITS 数据集划分为训练集和测试集两个部分:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3, random_state=0)
然后,我们需要选取2和3两个数字所在的所有特征点,只留下这些特征点的像素点值作为新的数据集的特征值:
import numpy as np
selected_features = np.where(np.logical_or(y_train==2, y_train==3))[0]
X_train_23 = X_train[selected_features]
y_train_23 = y_train[selected_features]
我们选取的特征点数量为:X_train_23.shape[1]
,结果为40。
最后,我们将测试集也做同样的特征点选取处理:
selected_features_test = np.where(np.logical_or(y_test==2, y_test==3))[0]
X_test_23 = X_test[selected_features_test]
y_test_23 = y_test[selected_features_test]
完整代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
digits = datasets.load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3, random_state=0)
selected_features = np.where(np.logical_or(y_train==2, y_train==3))[0]
X_train_23 = X_train[selected_features]
y_train_23 = y_train[selected_features]
selected_features_test = np.where(np.logical_or(y_test==2, y_test==3))[0]
X_test_23 = X_test[selected_features_test]
y_test_23 = y_test[selected_features_test]
我们在Jupyter Notebook中运行以上代码
可以看到,我们将原先的64个特征点,转化为了仅有40个的新数据集。
构建模型
最后,我们可以利用选取的特征点来构建模型,这里我们使用逻辑回归:
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train_23, y_train_23)
accuracy = clf.score(X_test_23, y_test_23)
print("Accuracy: {:.2f}%".format(accuracy*100))
输出结果为:Accuracy: 99.07%
可以看到,我们仅仅选取了40个特征点作为特征值,却仍然取得了99.07%的准确率,说明特征选择对于机器学习的重要性。
结论
本文介绍了如何将Sklearn DIGITS数据集转换为2和3特征数据集,并利用特征选择来构建模型。这个过程可以更好地帮助初学者了解特征工程的概念和应用。