机器学习

优质
小牛编辑
145浏览
2023-12-01

Python 有着海量的可用于数据分析、统计以及机器学习的库,这使得 Python 成为很多数据科学家所选择的语言。

下面我们列出了一些被广泛使用的机器学习及其他数据科学应用的 Python 包。

Scipy 技术栈

Scipy 技术栈由一大批在数据科学中被广泛使用的核心辅助包构成,可用于统计分析与数据可视化。由于其丰富的功能和简单易用的特性,这一技术栈已经被视作实现大多数数据科学应用的必备品了。

Scipy 技术栈由以下包组成(已链接到其文档):

  1. NumPy
  2. SciPy library
  3. Matplotlib
  4. IPython
  5. pandas
  6. Sympy
  7. nose

该技术栈当然也包括与其绑定在一起的 Python,这就不列在上述列表中了。

安装

想要安装这套完整的技术栈,或者只是想安装一些独立的包的话,您都可以参考下这份 指导文档

注意: 我们强烈建议您使用 Anaconda,它可以为您实现无缝化安装与维护数据科学包。

Scikit-learn

Scikit 是 Python 的一个免费且开源的机器学习库。它提供了很多现成的函数来实现很多机器学习算法,比如线性回归(Linear Regression),各种分类器(Classifiers),支持向量机(Support Vector Machines),K均值聚类(K-means),神经网络( Neural Networks)等。Scikit 也提供了一些可以直接用于训练和测试的示例数据集。

由于其速度快、健壮且易于使用的特点,Scikit 已成为大多数机器学习应用当中最为广泛使用的库之一。

安装

通过 PyPI 安装:

pip install -U scikit-learn

通过 Conda 安装:

conda install scikit-learn

Scikit-learn 也已经预装在 Anaconda(上面提到过)中了。如需更多 Scikit-learn 的安装指导,请参考 这个链接

示例

在这个示例中,我们在 Iris 鸢尾花卉数据集 上训练了一个简单的分类器,这一数据集是绑定在 Scikit-learn 里面的。

该数据集中取了花朵的四种特征:花萼长度,花萼宽度,花瓣长度以及花瓣宽度,并基于此把数据集中的花朵数据分成了三个种类(视作标签):山鸢尾(Setosa),杂色鸢尾(Versicolor)以及维吉尼亚鸢尾(Virginica)。在数据集中,标签使用数字代替:0(Setosa),1(Versicolor)和2(Virginica)。

我们将 Iris 数据集中的数据打乱顺序,并将其划分为彼此分离的训练集和测试集:最后10个数据点用于测试,其他的都用于训练。之后我们在训练集上训练一个分类器,再在测试集上进行预测。

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.metrics import accuracy_score
import numpy as np

#载入 Iris 数据集
iris = load_iris()

x = iris.data # 获得数据的数组
y = iris.target # 获得每项数据对应的标签(即答案)的数组

# 获得标签对应的名称,即花朵的三个种类的名称
y_names = iris.target_names

# 获得顺序被随机打乱的索引,用于把数据集划分为训练集和测试集
test_ids = np.random.permutation(len(x))

#把数据和标签划分为训练集和测试集
#最后10个数据点分给测试集,其他的都分给训练集

x_train = x[test_ids[:-10]]
x_test = x[test_ids[-10:]]

y_train = y[test_ids[:-10]]
y_test = y[test_ids[-10:]]

# 使用决策树分类器
clf = tree.DecisionTreeClassifier()

# 使用训练集来训练(拟合)我们的分类器
clf.fit(x_train, y_train)

# 在测试集上进行预测
pred = clf.predict(x_test)

print pred # 打印出预测的标签,即花朵种类
print y_test # 打印出真实的标签
print (accuracy_score(pred, y_test))*100 # 打印出预测精度

由于我们对于数据集的划分是随机的,并且分类器在每一轮迭代中都进行了训练,所以我们得到的精度可能多种多样。运行上面的代码后,我们可以得到以下输出结果:

[0 1 1 1 0 2 0 2 2 2]
[0 1 1 1 0 2 0 2 2 2]
100.0

第一行包含的是我们的分类器在测试集上所预测的标签(即花朵种类),第二行包含的是数据集中所给出的真实的花朵种类。这一次我们得到了100%的预测精度。

关于Scikit-learn的更多内容,可以查看这篇 文档