Python 机器学习实战:如何用 Scikit-learn 开始机器学习之旅? 随着数据科学的兴起,机器学习成为许多公司和组织所追逐的热门技术。而Python,作为一种多功能编程语言,也成为了机器学习的主要工具之一。在本篇文章中,我们将探讨如何使用Scikit-learn开展机器学习项目。 Scikit-learn是Python中最受欢迎的机器学习库之一。它提供了一系列的机器学习算法,包括分类、回归、聚类、降维和模型选择等。Scikit-learn是开源的,易于学习和使用,这使它成为了很多人的首选机器学习工具。 下面是一个基本的Scikit-learn程序: ```python from sklearn import datasets from sklearn import svm # 加载数据 iris = datasets.load_iris() # 创建模型 clf = svm.SVC() # 训练模型 clf.fit(iris.data, iris.target) # 预测新的数据 new_data = [[5.0, 3.6, 1.3, 0.25]] print(clf.predict(new_data)) ``` 在这个例子中,我们使用Scikit-learn实现了一个简单的分类器来预测鸢尾花的品种。首先我们从Scikit-learn中加载鸢尾花数据集,然后使用SVM算法创建一个分类器。我们使用数据集中的数据进行训练,并使用新的数据进行预测。 现在我们来更深入地了解一下Scikit-learn的特性。 ### 数据集 Scikit-learn提供了一些标准的数据集供我们使用,如鸢尾花数据集和手写数字数据集。我们可以使用`datasets`模块来加载这些数据集: ```python from sklearn import datasets iris = datasets.load_iris() digits = datasets.load_digits() ``` 鸢尾花数据集是一个包含150个样本和4个特征的数据集,每个样本都属于3个类别中的一个。手写数字数据集包含1797个样本,每个样本由8x8像素的图像表示,该图像代表一个0-9之间的数字。 我们还可以使用自己的数据集,只需要将数据加载到numpy数组中即可。 ### 数据预处理 在机器学习中,我们通常需要对数据进行预处理,以准备好用于训练模型。Scikit-learn提供了几种常见的预处理技术,如缩放和归一化。这些技术可以在`preprocessing`模块中找到: ```python from sklearn import preprocessing X_train = [[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]] X_scaled = preprocessing.scale(X_train) ``` 在这个例子中,我们使用`preprocessing`模块中的`scale`方法对数据进行了缩放。缩放操作将数据的每个特征缩放到均值为0,方差为1的范围内。这是一个很好的预处理技术,因为它可以消除特征之间的比例差异。 ### 特征选择 在机器学习中,有时候我们需要对特征进行选择,以减少计算量和降低模型复杂度。Scikit-learn提供了一些特征选择算法,如VarianceThreshold和SelectKBest。这些算法可以在`feature_selection`模块中找到。 ```python from sklearn.datasets import load_digits from sklearn.feature_selection import SelectKBest, chi2 digits = load_digits() X = digits.images.reshape((len(digits.images), -1)) y = digits.target # 选择最好的k个特征 X_new = SelectKBest(chi2, k=20).fit_transform(X, y) ``` 在这个例子中,我们使用`SelectKBest`方法来选择最好的20个特征。我们使用了卡方检验作为得分函数。卡方检验可以帮助我们确定特征和类别之间的关系。 ### 模型选择和训练 在机器学习中,我们需要选择合适的算法来训练我们的数据。Scikit-learn提供了众多的机器学习算法,包括回归、分类、聚类、降维和模型选择。这些算法可以在`model_selection`模块中找到。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression iris = load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=0) # 创建模型并训练 clf = LogisticRegression() clf.fit(X_train, y_train) # 预测 predicted = clf.predict(X_test) # 计算准确率 accuracy = clf.score(X_test, y_test) print("Accuracy: {}".format(accuracy)) ``` 在这个例子中,我们从Scikit-learn中加载了鸢尾花数据集,并使用`train_test_split`方法将数据拆分成训练集和测试集。然后,我们创建了逻辑回归模型,并使用训练数据对其进行了训练。最后,我们对测试数据进行了预测,并计算了模型的准确率。 ### 总结 在本文中,我们介绍了Scikit-learn,一个Python中最受欢迎的机器学习库。我们探讨了Scikit-learn提供的一些特性,如数据集、数据预处理、特征选择和模型选择。使用Scikit-learn,我们可以轻松地实现各种机器学习算法,从而快速构建机器学习模型。