机器学习

https://farm4.staticflickr.com/3954/34018729885_002ced9b54_k_d.jpg
Python拥有大量的数据分析、统计和机器学习库,使其成为许多数据科学家的首选语言。

一些广泛使用的机器学习和其他数据科学应用程序包被列在下面:

Scipy 栈(Scipy stack)

Scipy 栈由数据科学所使用的一组核心帮助包组成,用于统计分析和数据可视化。由于其庞大的功能和易用性,scripy栈被认为是大多数数据科学应用的必备条件。

该栈包含以下包(提供文档链接):

安装

要安装完整的栈或单个包,您可以参考 这里给出的说明。

注意:Anaconda 是高推荐的,因为它可以无缝地安装和维护数据科学包。

scikit-learn

Scikit是一个用于Python的免费开源机器学习库。 它提供了现成的功能来实现诸如线性回归、分类器、SVM、k-均值和神经网络等多种算法。它还有一些可直接用于训练和测试的样本数据集。

由于其速度、鲁棒性和易用性,它是许多机器学习应用程序中使用最广泛的库之一。

安装

通过 PyPI:

  1. pip install -U scikit-learn

通过 conda:

  1. conda install scikit-learn

scikit-learn 也随Anaconda发行(如上所述)。 有关更多安装说明,请参阅此链接

例子

本例中,我们在 Iris 数据集上训练一个简单的分类器,它与scikit-learn捆绑在一起。

数据集具有花的四个特征:萼片长度,萼片宽度,花瓣长度和花瓣宽度,并将它们分为三个花种(标签):setosa、versicolor或virginica。 标签已经被表示为数据集中的数字:0(setosa),1(versicolor)和2(virginica)。

我们清洗Iris数据集,并将其分为独立的训练和测试集:保留最后10个数据点进行测试,剩余的进行训练。然后我们在训练集训练分类器,并对测试集进行预测。

  1. from sklearn.datasets import load_iris
  2. from sklearn import tree
  3. from sklearn.metrics import accuracy_score
  4. import numpy as np
  5.  
  6. #loading the iris dataset
  7. iris = load_iris()
  8.  
  9. x = iris.data #array of the data
  10. y = iris.target #array of labels (i.e answers) of each data entry
  11.  
  12. #getting label names i.e the three flower species
  13. y_names = iris.target_names
  14.  
  15. #taking random indices to split the dataset into train and test
  16. test_ids = np.random.permutation(len(x))
  17.  
  18. #splitting data and labels into train and test
  19. #keeping last 10 entries for testing, rest for training
  20.  
  21. x_train = x[test_ids[:-10]]
  22. x_test = x[test_ids[-10:]]
  23.  
  24. y_train = y[test_ids[:-10]]
  25. y_test = y[test_ids[-10:]]
  26.  
  27. #classifying using decision tree
  28. clf = tree.DecisionTreeClassifier()
  29.  
  30. #training (fitting) the classifier with the training set
  31. clf.fit(x_train, y_train)
  32.  
  33. #predictions on the test dataset
  34. pred = clf.predict(x_test)
  35.  
  36. print pred #predicted labels i.e flower species
  37. print y_test #actual labels
  38. print (accuracy_score(pred, y_test))*100 #prediction accuracy

由于我们在每次迭代中随机分割和分类训练,所以准确性可能会有所不同。运行上面的代码得到:

  1. [0 1 1 1 0 2 0 2 2 2]
  2. [0 1 1 1 0 2 0 2 2 2]
  3. 100.0

第一行包含由我们的分类器预测的测试数据的标签(即花种),第二行包含数据集中给出的实际花种。我们这次准确率达到100%。

关于scikit-learn的更多内容可以在 文档中阅读。

原文: http://pythonguidecn.readthedocs.io/zh/latest/scenarios/ml.html