匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python机器学习实战案例:用Scikit-learn实现经典分类算法

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。