オリジナル住所:https://segmentfault.com/a/1190000017067753?utm_source=tag-newest
学ぶための最善の方法は、独自のデザインと小さなプロジェクトのいくつかを完了するために、機械学習技術にあります。
Pythonは非常に人気があり、強力な解釈プログラミング言語です。R言語とは異なり、Pythonは非常に完全な言語やプラットフォームであり、あなたはどちらかの研究開発を行うために使用することができ、また、システム製品を開発するために使用することができます。
そして、Pythonのモジュールやライブラリはそうタスクのためのソリューションの数を持つことができることを、私たちが選択するための多くのがあります。どの程度、まだ右、非常に強力に聞こえますか?
あなたは、Pythonを学ぶ使用するマシンを実行する場合は、最良の方法は、まず始めに、小さなプロジェクトを完了することで、なぜあなたは言うのですか?
それはあなたが(最低限の要件もある)Pythonインタプリタをインストールして起動する方法を知ることができるので。
それはあなたが全体の知っているようにプロジェクトを完了するために、どのようにステップバイステップで作るので。
これはあなたの信頼性を高めるように、それはあなたがあなた自身の小さなプロジェクトの作成を開始行うことができます。
それは完全な初心者の小規模なプロジェクト練習の手を必要とします
本と、非常に細かいあなたに説明多くのことを話して、あまりにも断片化されているが、これらの事の教材は、非常に迷惑ですが、あなたはどのようにこれらの知識の統合利用が一緒に理解するためにこれらのハードに依存しています。
機械学習は、それがプロジェクトの始まりであったとしても、自分でデータセットに適用された場合。
機械学習プロジェクトは、線形ではないかもしれないが、多くの手順がよく知っています:
問題を定義します。
レディデータ。
評価アルゴリズム。
最適化の結果。
結果を提示。
新しいプラットフォームは本当に最良の方法は、それが完全な機械学習プロジェクトを通じてステップを使用することで、予測を行うために要約データ、評価アルゴリズムからデータをインポートするに重要なステップがあるすべてを伴う新しいツールを習得します。
このような処理動作の下では、おそらくルーチンのかを理解することができるようになります。
機械学習のHello World
最初に実施するために使用クラシファイドアイリス(データリンクセット)で、それは非常に簡単に理解することがあるので、このプロジェクトは、初心者のために非常に適している最高の小さなプロジェクトの手の一つに始まりました。
プロパティ値であるため、あなたがインポートおよびプロセスデータにそう知っている必要があります。
プロジェクトは、比較的単純な教師付き学習アルゴリズムを操作する練習することができます分類です。
それはいくつかの特別な治療が必要な場合があり、また、多クラス分類問題です。
それが唯一の4つのプロパティと150例、データセットが小さい場合、それはあまりにも多くのメモリを占有しないという手段を有しています。
すべての属性は、特殊なスケーリングと翻訳せずに使用する前に、同じ値と単位の大きさを持っています。
ここでは、PythonでのHello Worldを機械学習を実行する方法を学び始めます。
教えチェン:Pythonでの機械学習のための
このセクションでは、我々は小規模なプロジェクトを学習完全な機械を完了します、以下は主な手順は以下のとおりです。
Pythonがインストールされ、scipyのダウンロードプラットフォーム。
インポートデータセット。
要約データセット。
可視化データセット。
評価アルゴリズム。
予測を行います。
スピードアップするために、あなたも私のコードをコピーして貼り付けることができ、独自のコマンドラインをノックしてみてください。
1.ダウンロードし、インストールやPython scipyのダウンロードを開始
お使いのコンピュータにインストールしていない場合は、Pythonとscipyのダウンロードプラットフォームをインストールします。
多くのオンラインチュートリアルがあるので、この部分は、詳細には触れません。
1.1インストールscipyのダウンロードライブラリ
Pythonバージョン2.7または3.5、本明細書で使用されます。
scipy
numpy
matplotlib
pandas
Sklearn
図書館上記のプログラムをインストールするには、多くの方法がありますが、これらのライブラリは、このメソッドを使用しているインストール後、選択方法を選択し、することをお勧めします。
scipyのダウンロードインストールページには、システム上のライブラリ内の各種のプログラムをインストールするための詳細な方法を提供します。
Mac OSで、あなたは、MacPortsのでこれらのライブラリとPython2.7をインストールすることができます詳細については、こちらをクリックしてください
Linux上で、あなただけのFedoraのようRPMをインストールし、パッケージマネージャを使用することができます。
Windowsシステムであれば、アナコンダの無料版をインストールすることをお勧めします。
注:上記のこれらのメソッドの基礎がコンピュータに既にバージョン0.18以上scikit学習を設置しています。
1.2のPythonを起動し、プログラムのバージョンを確認
このステップは重要です、あなたが適切に実行することができ、あなたのPython環境が正常にインストールされていることを確認します。
次のスクリプトは、このチュートリアルの実行に必要な各ライブラリをインポートし、適切なバージョンをエクスポートします、あなたはPython環境をテストすることができます。
コマンドラインを開き、Pythonインタプリタを起動します。
パイソン
私はあなたがインタプリタ上で直接動作する、またはコマンドラインで書かれたスクリプトの実行後に、偉大なエディタやIDE上でスクリプトを実行していないお勧めします。私たちの関心の焦点は、機械学習ではなく、ソフトウェアツールです。
次のスクリプトを入力するか、コピーして貼り付けます。
# Check the versions of libraries
# Python version
import sys
print('Python: {}'.format(sys.version)) # scipy import scipy print('scipy: {}'.format(scipy.__version__)) # numpy import numpy print('numpy: {}'.format(numpy.__version__)) # matplotlib import matplotlib print('matplotlib: {}'.format(matplotlib.__version__)) # pandas import pandas print('pandas: {}'.format(pandas.__version__)) # scikit-learn import sklearn print('sklearn: {}'.format(sklearn.__version__))
ワークステーションは、OS X上で動作している場合は、次のような出力が得られます。
Python: 2.7.11 (default, Mar 1 2016, 18:40:10) [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] scipy: 0.17.0 numpy: 1.10.4 matplotlib: 1.5.1 pandas: 0.17.1 sklearn: 0.18.1
そして、あなたはどのようなあなたの出力を制御することができます。
理想的には、二人は同じか、大多数に非常に近いはずです。APIは、一般的に、このチュートリアルでは、まだあなたの後ろに学んで適用され、心配しないで、あなたは少し低いを解放するようにすれば、高速で変化しません。
あなたはここでエラーが発生しました、最初の一時停止している場合は、エラーを修正します。
あなたがスムーズにすることはできません上記のスクリプトを実行する場合は、完全には後でこのチュートリアルを完了したことはできないであろう。
エラーのための提案は、あなたは、オンラインで表示されるものを見つけ、あるいは、そのようなパートカイコミュニティとして経験豊富な人を、お願いします。
2.データのインポート
私たちは、設定されているアイリスデータを使用する必要があり、このデータセットは、ほとんどのエントリ学習機械学習データセットは、最初の使用は、マシンがデータセットこんにちは言葉を学ぶと言うことができるで非常に有名でしたさ。
これは、4つにセンチメートルの花150回のアイリス観測、測定が含まれています。列5は、観察する花の種類です。すべての3つの種が花を観察するために属しています。
このステップでは、CSVファイルのURLから、虹彩データをインポートします。
2.1インポートライブラリ
まず、私たちは、このチュートリアルで使用するすべてのモジュール、関数とオブジェクトをインポートします。
# Load libraries
import pandas
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt from sklearn import model_selection from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC
インポート時にすべての情報は正確でなければなりません。エラーが発生した場合は、すぐに停止。先に進む前に、あなたは正しいscipyのダウンロード環境を確保しなければなりません。
インポートデータセット2.2
私たちは、パンダのためのツールを使用して、直接UCI機械学習リポジトリからデータをインポートすることができます。以下は、私たちはその後、統計や可視化の作業のためにそれを使用します。
私たちはインポート時にデータは、私たちは、後にデータを扱うことができます各列の名前を示していることに注意してください。
# Load dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class'] dataset = pandas.read_csv(url, names=names)
これは、データセットに導入されたすべてのエラーを持つべきではありません。
あなたはネットワークの問題であれば、iris.dataファイルは、それを同じようにインポートし、ローカルのファイル名のURLに変更し、作業ディレクトリにダウンロードすることができます。
3.集計データセット
今、私たちはデータを見ることができます。
このステップでは、我々はいくつかの方法についてのデータを分析します:
次元データセット。
詳細ビューデータそのもの。
すべての統計の要約属性。
カテゴリ変数のデータ分類ステータスによります。
、それぞれの方法だけで1本のコマンドラインを心配しないでください。コマンドラインは、将来のプロジェクトで再利用することができ、ワンタイムではない、無駄になりません。
3.1データセットの寸法
我々はすぐに形の属性データは、行数(一例)とどのように多くの列(属性)を含んで理解することができます。
# shape
print(dataset.shape)
あなたは150行と5を参照してください。
(150, 5)
3.2詳細ビューデータ
あなたのデータで真剣に見て、常に良いことです。
# head
print(dataset.head(20))
你应该会看到数据的前20行:
sepal-length sepal-width petal-length petal-width class
0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa 5 5.4 3.9 1.7 0.4 Iris-setosa 6 4.6 3.4 1.4 0.3 Iris-setosa 7 5.0 3.4 1.5 0.2 Iris-setosa 8 4.4 2.9 1.4 0.2 Iris-setosa 9 4.9 3.1 1.5 0.1 Iris-setosa 10 5.4 3.7 1.5 0.2 Iris-setosa 11 4.8 3.4 1.6 0.2 Iris-setosa 12 4.8 3.0 1.4 0.1 Iris-setosa 13 4.3 3.0 1.1 0.1 Iris-setosa 14 5.8 4.0 1.2 0.2 Iris-setosa 15 5.7 4.4 1.5 0.4 Iris-setosa 16 5.4 3.9 1.3 0.4 Iris-setosa 17 5.1 3.5 1.4 0.3 Iris-setosa 18 5.7 3.8 1.7 0.3 Iris-setosa 19 5.1 3.8 1.5 0.3 Iris-setosa
3.3統計概要
今、私たちは数、平均、最大値、最小値、およびいくつかのパーセンタイル値を含め、各プロパティの統計情報の要約を探すことができます。
# descriptions
print(dataset.describe())
私たちは0〜8センチの間のサイズでも、デジタル値の全てが同じ単位(cm)を持って見ることができます。
sepal-length sepal-width petal-length petal-width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.054000 3.758667 1.198667 std 0.828066 0.433594 1.764420 0.763161 min 4.300000 2.000000 1.000000 0.100000 25% 5.100000 2.800000 1.600000 0.300000 50% 5.800000 3.000000 4.350000 1.300000 75% 6.400000 3.300000 5.100000 1.800000 max 7.900000 4.400000 6.900000 2.500000
3.4クラスの分布
私たちは今、各カテゴリに属する行数を見て、それが絶対数として表示することができます。
class
Iris-setosa 50
Iris-versicolor 50
Iris-virginica 50
4.データの可視化
私たちは今、理解のデータベースを持っている今、我々はいくつかの視覚的なフォームを使用する必要がありますし、データを理解することで拡大しました。
二つの主要な視覚的な図を守ってください。
よりよい各プロパティを理解するために、単変量グラフィックス、。
より良い様々な特性間の関係を理解するために、多変量グラフィックス、。
4.1シングル変数グラフ
グラフィカルな個々の変数であり、いくつかの単一の変数グラフィックス、とレッツスタート。
入力変数がデジタルで考慮に入れると、私たちは、それぞれのボックスプロットのための入力変数を作成することができます。
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False) plt.show()
これは、私たちはより明確に入力属性の分布を確認することができます:
また、各入力変数のためにその分布を把握するためにヒストグラムを作成することができます。
# histograms
dataset.hist()
plt.show()
入力変数の二つは、私たちはこの仮定の完全な利点の背後にあるアルゴリズムを使用することができますので、これは、やや有用であるが、ガウス分布に見えます。
以上4.2変数グラフィックス
今、私たちは、変数間の相互作用を見ることができます。
まず、入力変数間の関係の構造を確認するために私たちを助け散布図、のすべての属性を見てください。
# scatter plot matrix
scatter_matrix(dataset)
plt.show()
なお、相関関係とそれらの間の高度に予測可能な関係を示している対角プロファイルのいくつかのプロパティ。
5.評価アルゴリズム
今、私たちは、データモデルの一部を構築し、そのデータの正確性をテストされて表示されません。
このセクションの主な手順は次のとおりです。
将数据集分离出一个验证集。
设定测试工具,使用10折交叉验证。
搭建6个不同的模型根据花朵测量值预测出鸢尾花种类。
选出最佳模型。
5.1 创建验证集
我们需要知道搭建的模型效果怎样。后面我们会用统计方法来验证模型对新数据的准确度。我们还希望通过评估模型在真正不可见数据时的表现,来进一步确定模型的准确度。
也就是我们会留一些数据不让算法看到,然后用这些数据来确定模型到底有多准确。
我们会将导入的数据集拆分为两部分,80% 用于训练模型,20% 用于验证模型。
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
Y = array[:,4]
validation_size = 0.20
seed = 7
X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
得到的 X_train 和 Y_train 里的训练数据用于准备模型,得到的 X_validation 和 Y_validation 集我们后面会用到。
5.2 测试工具
我们会用十折交叉验证法测试模型的准确度。
这会将我们的数据集分成 10 部分,轮流将其中 9 份作为训练数据,1份作为测试数据,进行试验。
# Test options and evaluation metric
seed = 7
scoring = 'accuracy'
现在我们用“准确率”这个维度去评估模型,也就是能正确预测出鸢尾花类别的比例。我们后面运行和评估模型时会使用分数变量。
5.3 搭建模型
针对这个问题,我们并不知道哪个算法最好,应当用哪些配置。我们从可视化图表中能够得知在有些维度上一些类别的部分是线性可分的,因此我们预期总体效果会不错。
我们看看这 6 种算法:
逻辑回归(LR)
线性判别分析(LDA)
K最近邻算法(KNN)
分类和回归树(CART)
高斯朴素贝叶斯(NB)
支持向量机(SVM)
这里面既有简单的线性算法(LA和LDA),也有非线性算法(KNN,CART,NB和SVM)。我们每次运行算法前都要重新设置随机数量的种子,以确保是在用相同的数据拆分来评估每个算法。这样能保证最终结果可以直接进行比较。
我们来搭建和评估模型:
Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier())) models.append(('CART', DecisionTreeClassifier())) models.append(('NB', GaussianNB())) models.append(('SVM', SVC())) # evaluate each model in turn results = [] names = [] for name, model in models: kfold = model_selection.KFold(n_splits=10, random_state=seed) cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring) results.append(cv_results) names.append(name) msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()) print(msg)
5.4 选择最佳模型
我们现在获得了 6 个模型以及每种模型的准确度评估状况。接下来需要将模型相互比较,选出最准确的那个。
运行上面的例子,会得到如下初步结果:
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188) KNN: 0.983333 (0.033333) CART: 0.975000 (0.038188) NB: 0.975000 (0.053359) SVM: 0.981667 (0.025000)
我们可以看到似乎 KNN 的估计准确率分值最高。
我们也可以将模型评估结果用图形表示出来,比较每个模型的跨度和平均准确度。这种衡量模型准确率的方法比较流行,因为每种算法都被评估了 10 次(十折交叉验证法)。
# Compare Algorithms
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()
你可以看到箱线图的顶部范围 呈压缩状,不少模型都达到了 100% 的准确率。
6.做出预测
经过验证,KNN 算法的准确率最高。现在我们看看该模型在验证集上的准确度。
我们最后来验证一下最好的模型的准确率有多高。拆分并保留一个验证集很值得,以防你在训练期间出现错误,比如对训练集过拟合或者数据泄露之类,这两种错误都会造成最终结果过于乐观。
我们可以直接在验证集上运行 KNN 算法,将结果总结为一个最终准确率分值,一个混淆矩阵和一个分类报告。
# Make predictions on validation dataset
knn = KNeighborsClassifier()
knn.fit(X_train, Y_train)
predictions = knn.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions)) print(classification_report(Y_validation, predictions))
我们可以看到模型的准确率为 0.9,即 90%。混淆矩阵显示了所犯的三个错误。最终,分类报告显示了每个类别的精确率、召回率、F1 值等。
[[ 7 0 0]
[ 0 11 1] [ 0 2 9]] precision recall f1-score support Iris-setosa 1.00 1.00 1.00 7 Iris-versicolor 0.85 0.92 0.88 12 Iris-virginica 0.90 0.82 0.86 11 avg / total 0.90 0.90 0.90 30
人人可用 Python 做机器学习任务
把上面的这篇教程过一遍,最多花你5-10分钟!
你不需要什么都懂。 你的目标就是完整的跟着操作一遍这个教程,然后得到结果。刚开始你不必什么都懂。可以一边做一边列出问题,多用用 help(FunctionName) 帮你理解 Python 中的语法,学习你正在用的函数。
你不需要明白算法的原理 。当然,知道机器学习算法的局限性和配置方式很重要,但对算法原理的学习可以放在后头。你应该循序渐进的了解算法的原理,在当前阶段主要任务就是熟悉平台。
你也不必是个Python程序员。 如果你是个 Python 初学者,Python 的语法会很陌生。和其它语言一样,重点关注函数调用和赋值,后面再详细深挖语法知识。
你也不用是个机器学习专家。 你可以在后面学习每种算法的好处和局限性,而且这方面有很多资料,比如关于机器学习项目的操作步骤,以及用验证集评估模型的重要性等。
机器学习项目的其它步骤。 本文并没有涉及机器学习项目的全部步骤,因为这毕竟是我们的第一个项目,关注重要步骤就行了,也就是:导入数据、查看数据、评估算法、做出预测.