Python机器学习实战案例:用Scikit-learn实现经典分类算法
本文将会介绍Python机器学习实战案例中用Scikit-learn实现经典分类算法的方法。在Python机器学习领域中,Scikit-learn是一个非常受欢迎的机器学习库,它提供了大量的机器学习算法和工具,可以帮助我们更加轻松地创建和测试我们的机器学习模型。在这个案例中,我们将使用Scikit-learn库中的K-Nearest Neighbors (KNN)、Decision Tree和Random Forest这些经典分类算法,并将它们应用于一个经典的数据集,来预测一个人是否会发生糖尿病。
1.准备工作
在开始之前,我们需要安装Scikit-learn库以及其他必要的Python库。可以使用pip命令来安装这些库:
pip install numpy scipy scikit-learn pandas matplotlib
在安装完成后,我们可以开始处理数据了。本文的数据集来自于Pima Indians Diabetes Database,它包含了768个样本,每个样本有8个特征和一个二元输出(0或1),0表示不发生糖尿病,1表示发生糖尿病。
2.数据预处理
在开始阅读数据之前,我们需要对数据进行一些预处理。在这个案例中,我们需要把数据分成训练集和测试集。我们可以使用Scikit-learn的train_test_split方法来实现这个功能:
from sklearn.model_selection import train_test_split
feature_cols = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age']
target_col = 'Outcome'
X = df[feature_cols]
y = df[target_col]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
在上面的代码中,我们首先定义了特征和目标列,并使用这些列从数据框中提取了特征和目标数据。然后,我们使用train_test_split方法将数据分成了训练集和测试集,其中test_size=0.25表示我们将数据分成75%的训练集和25%的测试集。
3.选择模型
在数据预处理完成后,我们需要选择合适的模型来训练我们的数据。在这个案例中,我们将使用K-Nearest Neighbors (KNN)、Decision Tree和Random Forest这些经典分类算法,来进行数据的训练和预测。
3.1 K-Nearest Neighbors (KNN)
KNN算法是一种非参数算法,它可以用来对未知数据进行分类。在KNN算法中,未知数据被赋予它的k个最近邻居的类别中出现最多的类别。
在Scikit-learn中,我们可以使用KNeighborsClassifier类来实现KNN算法:
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
print('Accuracy of KNN classifier on training set: {:.2f}'.format(knn.score(X_train, y_train)))
print('Accuracy of KNN classifier on test set: {:.2f}'.format(knn.score(X_test, y_test)))
在上面的代码中,我们首先使用KNeighborsClassifier类创建了一个KNN分类器,其中n_neighbors=5表示我们将使用5个最近邻来进行分类。然后,我们使用fit方法将数据集上的训练数据拟合到模型中,并使用score方法来计算训练集和测试集上的准确率。
3.2 Decision Tree
决策树算法是一种基于树结构的分类算法,它可以将一个样本分成两个或多个子样本,直到子样本中的所有数据都属于同一类别。
在Scikit-learn中,我们可以使用DecisionTreeClassifier类来实现决策树算法:
from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier(max_depth=4)
dtree.fit(X_train, y_train)
print('Accuracy of Decision Tree classifier on training set: {:.2f}'.format(dtree.score(X_train, y_train)))
print('Accuracy of Decision Tree classifier on test set: {:.2f}'.format(dtree.score(X_test, y_test)))
在上面的代码中,我们首先使用DecisionTreeClassifier类创建了一个决策树分类器,其中max_depth=4表示我们限制了决策树的最大深度为4。然后,我们使用fit方法将数据集上的训练数据拟合到模型中,并使用score方法来计算训练集和测试集上的准确率。
3.3 Random Forest
随机森林算法是一种基于集成学习的分类算法,它可以将多个决策树合并成一个更强大的分类器。
在Scikit-learn中,我们可以使用RandomForestClassifier类来实现随机森林算法:
from sklearn.ensemble import RandomForestClassifier
rforest = RandomForestClassifier(n_estimators=10, max_depth=4)
rforest.fit(X_train, y_train)
print('Accuracy of Random Forest classifier on training set: {:.2f}'.format(rforest.score(X_train, y_train)))
print('Accuracy of Random Forest classifier on test set: {:.2f}'.format(rforest.score(X_test, y_test)))
在上面的代码中,我们首先使用RandomForestClassifier类创建了一个随机森林分类器,其中n_estimators=10表示我们将使用10个决策树来形成一个随机森林,max_depth=4表示我们限制了决策树的最大深度为4。然后,我们使用fit方法将数据集上的训练数据拟合到模型中,并使用score方法来计算训练集和测试集上的准确率。
4.结果分析
在对三个模型进行训练和测试后,我们可以得到它们的准确率:
Accuracy of KNN classifier on training set: 0.80
Accuracy of KNN classifier on test set: 0.71
Accuracy of Decision Tree classifier on training set: 0.80
Accuracy of Decision Tree classifier on test set: 0.77
Accuracy of Random Forest classifier on training set: 0.81
Accuracy of Random Forest classifier on test set: 0.78
从上面的结果可以看出,Random Forest算法在测试集上的准确率最高,为0.78,Decision Tree算法在测试集上的准确率为0.77,KNN算法在测试集上的准确率最低,为0.71。
5.总结
在这个案例中,我们使用了Scikit-learn中的K-Nearest Neighbors (KNN)、Decision Tree和Random Forest这些经典分类算法,并将它们应用于一个经典的数据集,来预测一个人是否会发生糖尿病。在对三个模型进行训练和测试后,我们发现Random Forest算法在测试集上的准确率最高,为0.78,Decision Tree算法在测试集上的准确率为0.77,KNN算法在测试集上的准确率最低,为0.71。