機械学習学習-Schikt-Learn体験


Scikit-Learnとは

  • Pythonベースの他の機械学習パッケージも、一貫したAPIを実現するために、最も簡単で最もPython化されたAPIを提供している.
  • 機械学習は、多様なアルゴリズムと開発が容易なフレームワークとAPIを提供する.
  • は長期的な実践的検証を経て、多くの環境でよく使われている成熟したライブラリです.
  • は主にNumpyとScpyの基礎の上に構築されている.
  • 機械学習用語の整理


    とくせい

  • データセットの一般的な属性
  • 機械学習は2次元または多次元データにおいてもよく用いられるため、目標値を除くすべての属性を特徴
  • と呼ぶ.

    ラベル、クラス、ターゲット(値)、決定(値)


    目標値または決定値は、学習指導時に学習データに提供される正しいデータです.
    この決定値は、学習指導中に行われる分類についてラベルまたはクラスとして指定します.

    アドバイザラーニング-分類



    分類は典型的なサポート学習方法である.
    ラーニングでは、学習に使用されるさまざまなフィーチャーと分類の決定値「ラベル」(Label)データを使用してモデルを学習し、個別のテストデータセットで未知のラベルを予測します.
    すなわち,指導学習は,明確な答えを持つデータを先に学習し,未知の答えを予測する方法である.
    このとき,学習データセット,機械学習モデルの予測性能を評価するために,与えられたデータセットをテストデータセットとして指定する.

    サイクロンを用いてペンの花のデータを分類する


    まず作成する機械学習モデルは,ペンデータセットを用いてペン品種を分類する.ペンシルデータセットは、花びらの長さと幅、萼の長さと幅の特徴に基づいて花の品種を予測することを目的としている.

    ペンデータ分類予測プロセス

  • データセット分離
    データを学習データとテストデータに分離します.
  • 学習
  • モデル
    学習データに基づいてMLアルゴリズム学習モデルを適用する.
  • 予測の実行
    学習したMLモデルを用いてテストデータの分類(すなわちペン花タイプ)を予測した.
  • 評価
    これらの予測結果をテストデータの実際の結果値と比較して,MLモデルの性能を評価した.
  • サイキレンを用いてアヤメ(Irs)データ品種を予測する

    # 사이킷런 버전 확인
    import sklearn
    print(sklearn.__version__)
    0.19.1
    ペン先予測をロードする双方向需要モジュール
    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import train_test_split
    データセットのロード
    import pandas as pd
    
    # 붓꽃 데이터 세트를 로딩합니다. 
    iris = load_iris()
    
    # iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다. 
    iris_data = iris.data
    
    # iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다. 
    iris_label = iris.target
    print('iris target값:', iris_label)
    print('iris target명:', iris.target_names)
    
    # 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다. 
    iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
    iris_df['label'] = iris.target
    iris_df.head(3)
    iris target값: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2]
    iris target명: ['setosa' 'versicolor' 'virginica']
    sepal length (cm)
    sepal width (cm)
    petal length (cm)
    petal width (cm)
    label
    0
    5.1
    3.5
    1.4
    0.2
    0
    1
    4.9
    3.0
    1.4
    0.2
    0
    2
    4.7
    3.2
    1.3
    0.2
    0
    学習データとテストデータセットを分離する
    X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, 
                                                        test_size=0.2, random_state=11)
    ラーニングデータセットを使用したラーニングの実行
    # DecisionTreeClassifier 객체 생성 
    dt_clf = DecisionTreeClassifier(random_state=11)
    
    # 학습 수행 
    dt_clf.fit(X_train, y_train)
    DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
                max_features=None, max_leaf_nodes=None,
                min_impurity_decrease=0.0, min_impurity_split=None,
                min_samples_leaf=1, min_samples_split=2,
                min_weight_fraction_leaf=0.0, presort=False, random_state=11,
                splitter='best')
    テストデータセットを使用した予測
    # 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행. 
    pred = dt_clf.predict(X_test)
    pred
    array([2, 2, 1, 1, 2, 0, 1, 0, 0, 1, 1, 1, 1, 2, 2, 0, 2, 1, 2, 2, 1, 0,
           0, 1, 0, 0, 2, 1, 0, 1])
    予測精度評価
    from sklearn.metrics import accuracy_score
    print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
    예측 정확도: 0.9333