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。