Ape Creation Essay | Python-sklearn 機械学習クイック スタート: 初めての機械学習プロジェクト

目次

序文

1. 目的から始める

1. データのインポート

2. プロジェクト開始

1. データのインポート

2. データのプレビュー

3. データの前処理

1. オーバーサンプリング

 2.アンダーサンプリング

4. データの視覚化

 一変量チャート

多変量グラフ

5.モデルをトレーニングする

5.1 データセットを分割する

 5.2 評価アルゴリズム

5.3 モデルの確立

 5.4 モデル予測

注意してください、迷子にならないようにしてください。間違いがある場合は、メッセージを残してアドバイスをお願いします。どうもありがとうございました



序文

機械学習の学習を始めて 3 年が経ち、モデリング プロセスとさまざまなモデルの使用シナリオを大まかに把握しています。これらのうち、すべての機械学習記事の中で、本当に入門的な記事が欠けているように感じます。どんな状況でも学習の最初の一歩を踏み出すことはより難しく、学習のコストは非常に高く、学習した内容に比べてメリットも大きくなります。特に機械学習は数学や論理との関わりが深い科目で、最初は大変ですが、実際にやってみるとワクワク感や喜びが生まれるので、私が取り組んでいる理由だと感じています。データマイニング. モデリングはこの理由で機能します. この記事を書いている私は、他の友人が機械学習を始めたいときに自分の能力についてあまり心配せず、最初の一歩を踏み出すことを願っています. 皆さんがそれを気に入ってくれることを願っています。

読者が読んだ後に間違いや意見を言うことができ、ブロガーがブログを長期間維持し、適時に更新することを願っています.


1. 目的から始める

これは最初のプロジェクトなので、それほど複雑にするのではなく、すべてをシンプルに保ちましょう。また、Python-sklearn などの強力な機械学習分析ライブラリも用意しています。ですから、目的から直接始めて、Iris Flower ライブラリを使用して分類を行います。それはとても簡単です。

1. データのインポート

では、まずデータが必要です。そのデータはどこから来るのでしょうか?

機械学習を行う上で、データは常に難しい問題でした。機械学習モデルを構築するプロセスは、大量の履歴データを使用してモデルをトレーニングし、真の値に適合する機能を実現することです。データの質と量によって、データの収集からデータの処理と計算まで、モデルの上限が決まります。取得にはセンサーが大きく関与します。複雑なものは少し曇っており、多次元センサーですが、データベースからユーザー情報を取得するだけでも問題ありません。データの処理は、特別な ETL チームまたは部門によって行われます。収集されたデータの種類によって、処理の程度は異なります。たとえば、機密データは感度を下げる必要があり、欠落しているデータは完成させて削除する必要があります。コンピューティングに関しては、より多くの形式があり、モデルの精度を追求するだけでなく、ビジネスで人気のあるビッグデータ分散コンピューティング フレームワークやニューラル ネットワーク ディープ ラーニング フレームワークなど、スピードも追求しています。つまり、最初にデータのソースを考慮しません。機械学習 sklearn ライブラリには虹彩データが付属しています。The Iris iris dataset contains 3 category: Iris-setosa, Iris-versicolor and Iris-virginica, with a total of 150 records and 50 data in each category. 各レコードには、がく片の長さ、がく片の幅、花弁の長さ、および花弁の 4 つの特徴があります。幅。

  • がく片の長さ: がく片の長さ
  • sepalwidth: がく片の幅
  • 花弁の長さ: 花弁の長さ
  • 花びらの幅: 花びらの幅

上記の4つの特性の単位はすべてセンチメートル(cm)です。

このデータセットには次の特徴があります。

  • すべての機能データは数値であり、データのインポート方法と処理方法を考える必要はありません。
  • すべての機能の数値単位は同じで、スケーリングは必要ありません。

次に、従来の機械モデル モデリング プロセスをインストールして、機械学習プロジェクトのすべてのステップを完了します。このプロジェクトを実装するには、次の手順に従います。

2. プロジェクト開始

1. データのインポート

まず、使用するライブラリをインポートする必要があります。

from sklearn.datasets import load_iris
import pandas as pd

 その後、データにログインするだけで、データの形式を確認できます。

iris_data = load_iris()
iris_data_feature=list(iris_data.data)
iris_data_df=pd.DataFrame(iris_data_feature,columns=['花萼长度','花萼宽度','花瓣长度','花瓣宽度'])
iris_data_df

 

そのうち、iris_data のデータは主に 2 つの部分に分けられ、一方は「がくの長さ」「がくの幅」「花弁の長さ」「花弁の幅」の 4 つの次元を表すデータであり、対象は花型データ:

iris_data_class=list(iris_data.target)
iris_class_df=pd.DataFrame(iris_data_class,columns=['花朵类型'])
iris_class_df

 

データは非常に一般的であり、小数点以下 1 桁まで正確であることがわかります.大量のデータを含むデータセットを肉眼で観察するのは非常に不便です.データを直感的にプレビューする必要があります.

マージすることで、後の描画と統計のために完全な虹彩データ テーブルを取得できます。

iris_true_df=pd.concat([iris_data_df,iris_class_df],axis=1)

 

2. データのプレビュー

データをプレビューするには多くの方法があり、データの視覚化またはデータの統計的記述を通じてプレビューできます。ここでは、pandas の強力なデータ分析機能を紹介します.Pandas には多くの統計分析機能があり、共通の統計パラメータをすばやく取得できます。

iris_true_df.describe()

その中で、統計値変数の説明:

  •    count: 数値統計、この列にいくつの有効な値があるか
  •    unipue: 異なる値がいくつあるか
  •    std: 標準偏差
  •    min: 最小値
  •    25%: 四分位数
  •    50%: 分位の半分
  •    75%: 四分位数
  •    max: 最大値
  •    平均:平均

さまざまな花の種類のデータをラベルでグループ化し、各カテゴリのデータ分布がバランスが取れているかどうかを確認できます。

iris_true_df.groupby('花朵类型').size()

 

アヤメは 3 種で 50 個のデータがあり、バランスがとれていることがわかります。グループ化することで、さまざまなカテゴリの花のさまざまな次元の集計データを取得するために集計することもできます。

iris_true_gy=iris_true_df.groupby('花朵类型')
for name,group in iris_true_gy:
    print(name)
    display(group.head())

 

pandas の agg 集計機能を使用すると、より洗練された統計を取得できます。

iris_true_gy['花萼长度'].agg(['min','mean','max'])

 

3. データの前処理

データの分布が不均衡な場合、モデルの精度に影響を与える可能性があります。したがって、データ分布が偏っている場合は、データを加工して比較的バランスの取れた状態に調整する必要があります。

機械学習の主要なトピックであるデータの前処理は、何十年にもわたる経験と技術の蓄積を経てきました。さらに詳しく知りたい場合は、以下を参照してください:クイック スタディ - 特徴データ カテゴリ分析と前処理方法の詳細な説明 + Python コード - Fanstuck のブログ - CSDN ブログ

この記事では、処理方法は次のとおりです。

データ バランス アルゴリズム 機械学習の種類 + Python コード 詳細な説明 - Fanstuck のブログ - CSDN ブログ - データ バランス

1. オーバーサンプリング

オーバーサンプリングはアップサンプリングとも呼ばれ、この方法は分布が不均一な小さなデータに適しています。ビッグ データの分布が偏っている場合は、カテゴリが異なる元の小さなデータセットを、カテゴリが異なるデータセットと同じサイズに拡張します。最初の例のデータのように、オーバーサンプリングを実行すると、260,000 を超えるデータが生成されます。アンダーサンプリングと比較すると、計算の重み比と演算時間が大幅に増加します。オーバーフィッティングを引き起こすことさえあります。ただし、この方法を使用すると、データが少なすぎることによるアンダーフィッティングも回避できます。

 2.アンダーサンプリング

アンダーサンプリング (ダウンサンプリングとも呼ばれます) は、通常、異なる種類の小さなデータセットに匹敵するまで、より大きなカテゴリのデータを削減します。例 1 のデータをアンダーサンプリングすると、13w のユーザー行動データは 6730 個のデータに削減され、モデリング速度が大幅に加速されます。

データの前処理はこのデータセットで実行されているため、このブログではデータ予測のケースについて詳しく説明しません. 興味のある学生は、機械学習モデルに関するブロガーの以前の記事に行くことができます.

4. データの視覚化

ここで、このデータをグラフとして描画すると、Excel のリスト データをグラフに変換するのと同じように、Python でも同様の効果が得られると考える必要があります。ここでは、matplotlib ライブラリをインポートするだけで済みます。

matplotlib のフォントとテーマ、色と出力方法を選択できます。

import matplotlib.pyplot as plt
from matplotlib import font_manager  # 导入字体管理模块
plt.style.use('ggplot')

 一変量チャート

単変量グラフは個々の特徴属性を示すことができ、各特徴属性は数値であるため、属性の離散速度と中央値を線にプロットすることで示すことができます。

ここで、中国語フォントはエラーを報告することに注意してください。指定されたデフォルト フォントを設定する必要があります。

from pylab import mpl
#mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']    # 指定默认字体:解决plot不能显示中文问题

mpl.rcParams['axes.unicode_minus'] = False           # 解决保存图像是负号'-'显示为方块的问题
iris_data_df.plot(kind='box',subplots=True,layout=(2,2))

 各特徴属性の分布は、ヒストグラムを介して表示することもできます。

iris_data_df.hist()

 

 萼の長さ、萼の幅、花弁の長さはすべてガウス分布に従っていることがわかります。

多変量グラフ

多変量チャートを使用すると、さまざまな特徴属性間の関係を表示できます。各属性の影響関係を散布図で見ていきます。

#散点矩阵图
scatter_matrix(iris_data_df)

 

## 第一步,先定义1张空白的大画板
fig=plt.figure(num=1, figsize=(16, 16))
## 增加1个子图,2x2,共4个子图,排第1个
ax1 = fig.add_subplot(221)
ax1.scatter(x=iris_true_df.iloc[:,0:1], y=iris_true_df.iloc[:,4:5],color='k',alpha=0.5)
## 增加1个子图,2x2,共4个子图,排第2个
ax2 = fig.add_subplot(222)
ax2.scatter(x=iris_true_df.iloc[:,1:2], y=iris_true_df.iloc[:,4:5],alpha=0.5)
## 增加1个子图,2x2,共4个子图,排第3个
ax3 = fig.add_subplot(223)
ax3.scatter(x=iris_true_df.iloc[:,2:3], y=iris_true_df.iloc[:,4:5],color='tan',alpha=0.5)
## 增加1个子图,2x2,共4个子图,排第4个
ax4 = fig.add_subplot(224)
ax4.scatter(x=iris_true_df.iloc[:,3:4], y=iris_true_df.iloc[:,4:5],color='c',alpha=0.5)

初心者が matplotlib にアクセスするのは少し複雑かもしれませんが、頻繁に使用すると、関数の使用方法をすぐに覚えることができます。

各品種の花の各次元の特徴は明確に区別でき、大きな違いがあることが直感的にわかります。このようにして、モデルの構築とトレーニングを開始できます。

5.モデルをトレーニングする

最適なアルゴリズムを見つけるために、モデルをトレーニングするためのデータの一部と、モデルの精度を検証するためのデータの一部が必要です。

5.1 データセットを分割する

通常、データ セットを 2/8 に分割し、そのうち 80% のデータをトレーニングに使用し、20% のデータを検証に使用します。

from sklearn.model_selection import train_test_split
iris_array=iris_true_df.values
X=iris_array[:,0:4]
Y=iris_array[:,4]
test_model=0.2
seed=5
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=test_model,random_state=seed)

 5.2 評価アルゴリズム

ここでは、10 分割交差検証法を使用して、アルゴリズムの精度を評価します。10 分割交差検証では、データをランダムに 10 の部分に分割します。9 つはモデルのトレーニング用、1 つはアルゴリズムの評価用です。

from sklearn.model_selection import KFold

KFold と K-fold 検証は同じです。つまり、データセットを K 個の部分に分割し、そのうちの 1 つを検証に使用し、残りの k-1 個のデータをトレーニングに使用します。そのため、KFold クラスは難しくなく、データ分割にも使用されます。

5.3 モデルの確立

sklearn を使用するのに非常に便利なことの 1 つは、モデルをインポートするだけでよく、基礎となる計算ロジックを実行する必要がないことです。プロジェクトの初期段階では、テストのためにさまざまなアルゴリズムを呼び出すことができますが、機械学習を本格的に開始する場合は、各アルゴリズムを今すぐマスターして、パラメーターをより正確に調整する必要があります。

ここでは、評価のための 6 つのアルゴリズムを紹介します。

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

 次に、6 つの異なるモデルを構築します。

models={}
models['LR']=LogisticRegression()
models['LDA']=LinearDiscriminantAnalysis()
models['KNN']=KNeighborsClassifier()
models['CART']=DecisionTreeClassifier()
models['NB']=GaussianNB()
models['SVM']=SVC()

 その後、モデル評価アルゴリズムを構築する必要があります。

results=[]
for key in models:
    kfold=KFold(n_splits=10,shuffle=True,random_state=seed)
    cv_results=cross_val_score(models[key],X_train,Y_train,cv=kfold,scoring='accuracy')
    results.append(cv_results)
    print('%s:%f(%f)'%(key,cv_results.mean(),cv_results.std()))

この時点で、データの視覚化結果をさらに使用できればよいでしょう。

#箱线图
fig=pyplot.figure()
fig.suptitle('Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()

 

 5.4 モデル予測

私たちの評価では、LR ロジスティック回帰アルゴリズムが最も正確なアルゴリズムであることが示されています。次に、予約された評価データ セットを使用して、アルゴリズム モデル レポートを作成します。

LR=LogisticRegression()
LR.fit(X=X_train,y=Y_train)
predictions=LR.predict(X_test)
print(accuracy_score(Y_test,predictions))
print(confusion_matrix(Y_test,predictions))
print(classification_report(Y_test,predictions))

アルゴリズムの精度は 96.7% で、実際のプロジェクトの予測精度は非常に低く、データが十分に単純であるためです。

混同行列は混同行列です。classification_report は、各カテゴリの予測、適合率、再現率、および F1 を提供します。

これで、非常に標準的なモデリング プロセスである最初の機械学習プロジェクトが完了しました。データのインポートからデータの視覚化、データの前処理、モデルの確立と評価まで、1 つの側面の分割に関連する多くの知識があります。対応する各トピックは、私たちの深い理解と発掘に値します。また、sklearn はモデルをすばやく構築できるため、パラメーターの調整が容易になり、機械学習のクラッシュ ライブラリと見なすことができます。ただし、アルゴリズムをより正確に選択し、融合モデルやより高度なモデルを構築するには、機械学習アルゴリズム モデル全体をより明確に理解する必要があります。

注意してください、迷子にならないようにしてください。間違いがある場合は、メッセージを残してアドバイスをお願いします。どうもありがとうございました

この問題は以上です。私はファンスタックです. ご不明な点がございましたら, お気軽にメッセージを残してください. 次号でお会いしましょう.


おすすめ

転載: blog.csdn.net/master_hunter/article/details/126124139