サンプルコード集 (scikit-learn)

トップページ>サンプルコード集 (scikit-learn)

サンプルコード集

◯こちらのサンプルコードは指導等にご自由にお使いください。


【サンプルコードの使い方】
◯サンプルコードを写す時はコピペをしないようにしましょう。
◯▶を押すと出力が表示されます。
◯Geminiボタンを押すとGemini(AI)による解説が表示されます。間違っていることもあるので、疑問に思った場合はご質問ください。


【要素ごとのサンプルコードページへ移動】
全て
if文
for文
関数
配列
ファイル入出力
Numpy
Matplotlib
openpyxl
Pandas
正規表現
Biopython
scikit-learn
seaborn
Graphviz
Gemini
Tkinter

【Code List】

CODE: d-1 (scikit-learn)

CODE: d-2 (scikit-learn)

CODE: d-3 (scikit-learn)



CODE: d-1 (scikit-learn)


from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt


# ---- Config ----

CSV_FILE = "http://python.hisakatano.com/data/iris.csv"
OUTPUT_FILE_1 = "d-1_output_1.png"
OUTPUT_FILE_2 = "d-1_output_2.png"


# ---------------------------------------------------------
# PCAの次元圧縮結果のプロット
# ---------------------------------------------------------

def plot_pca_result(df, output_file):
    plt.clf()
    label_type = set(df["label"])
    for t in label_type:
        df2 = df.query('label=="%s"' % (t))
        plt.scatter(x=df2[0], y=df2[1], label=t)
    plt.legend()
    plt.grid()
    plt.xlabel("PC1")
    plt.ylabel("PC2")
    plt.savefig(output_file)
    return


# ---------------------------------------------------------
# メイン
# ---------------------------------------------------------

def main():
    # ---- (1) data frameでのデータ取得 ----
    df = pd.read_csv(CSV_FILE, index_col=None, header=0)
    print(df)

    # ---- (2) numpyに変換しデータ成形 ----
    x = df.iloc[:, 0:4].to_numpy() 

    # ---- (3) scikit-learnによる分析処理 ----
    pca = PCA(n_components=2)
    pca.fit(x)
    x0 = pca.transform(x)

    # ---- 次元圧縮結果の可視化 ----
    df2 = pd.DataFrame(x0)
    df2["label"] = df["species"]
    print(df2)
    plot_pca_result(df2, OUTPUT_FILE_1)

    # ---- 寄与度の可視化 ----
    df3 = pd.DataFrame(pca.components_.T)
    df3["label"] = df.columns[0:4]
    print(df3)
    plot_pca_result(df3, OUTPUT_FILE_2)

    return(0)


main()




【ポイント】
◯pip install scikit-leranが必要。
◯「(1)data frameでのデータ取得 -> (2)numpyに変換しデータ成形 -> (3) scikit-learnによる分析処理」 が共通する一連の流れ。
◯numpyへの変換は必要ないときもあるが、本格的なデータ分析のときには必須の手順となるため慣れておこう。
◯参考: https://qiita.com/fsd-aki/items/65628ebe0973d88c16ef
◯出力ファイル1: https://python.hisakatano.com/data/d-1_output_1.png
◯出力ファイル2: https://python.hisakatano.com/data/d-1_output_2.png
◯irisデータについて: https://qiita.com/ao_log/items/fe9bd42fd249c2a7ee7a
◯PCA(主成分分析)とは?: https://www.srush.co.jp/blog/2462384781




CODE: d-2 (scikit-learn)


from sklearn.linear_model import LinearRegression
import pandas as pd
import matplotlib.pyplot as plt


# ---- Config ----

CSV_FILE = "http://python.hisakatano.com/data/linear_regression_data.csv"
OUTPUT_FILE = "d-2_output.png"


# ---------------------------------------------------------
# メイン処理
# ---------------------------------------------------------

def main():
    # ---- (1) data frameでのデータ取得 ----
    df = pd.read_csv(CSV_FILE, index_col=None, header=0)
    print(df)

    # ---- (2) numpyに変換しデータ成形 ----
    data_na = df.to_numpy() 

    # ---- (3) scikit-learnによる分析処理 ----
    lr = LinearRegression()
    x = data_na[:, 0]
    y = data_na[:, 1]

    x = x.reshape(len(x), 1)    # xは行列にする。
                                # 今回は2次元データなのでNx1の行列。
    print(x)
    print(y)
    lr.fit(x, y)

    coef = lr.coef_[0]          # 傾き
    intercept = lr.intercept_   # 切片
    print("傾き: %f" % (coef))
    print("切片: %f" % (intercept))

    plt.scatter(x, y, color="red")
    plt.plot(x, lr.predict(x), color="blue")

    plt.grid()
    plt.savefig(OUTPUT_FILE)

    return(0)


main()




【ポイント】
◯Linear regression(線形回帰)とは: 散布図にいい感じに直線を引く処理。
◯最小二乗法と言った方が伝わる人もいるかも。
◯lr.fit(x, y)のxは行列にする。本来多次元のデータも扱えるため、xは多次元でも可。今回は二次元なので、Nx1の行列とする。
◯参考: https://qiita.com/0NE_shoT_/items/08376b08783cd554b02e
◯出力ファイル: https://python.hisakatano.com/data/d-2_output.png




CODE: d-3 (scikit-learn)


from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import numpy as np
import warnings


# ---- Config ----

warnings.simplefilter("ignore")     # 警告が表示されないようにする
CSV_FILE = "http://python.hisakatano.com/data/iris.csv"



# ---------------------------------------------------------
# MLPの学習
# ---------------------------------------------------------

def learn_mlp(x_arr, y_arr):
    print("Learning ... ")
    model = MLPClassifier(hidden_layer_sizes=(100,), max_iter=100, activation="relu", verbose=True)
    model.fit(x_arr, y_arr)
    print("Learning ... done")

    return(model)


# ---------------------------------------------------------
# メイン処理
# ---------------------------------------------------------

def main():
    # ---- (1) data frameでのデータ取得 ----
    df = pd.read_csv(CSV_FILE, index_col=None, header=0)
    print(df)

    x_df = df.iloc[:, 0:4]
    y_df = df.iloc[:, 4]

    # ---- (2) numpy arrayに変換しデータ成形 ----
    x_arr = x_df.to_numpy()
    y_arr = y_df.to_numpy()

    print(x_arr[0:5])
    print(y_arr[0:5])

    # ---- (3) scikit-learnによる分析処理 ----
    # ラベルを数値に変換 ("setosa"->0, "versicolour"->1, "virginica"->2)
    le = LabelEncoder()
    y_arr = le.fit_transform(y_arr)
    print(y_arr[0:5])

    # モデルの学習
    model = learn_mlp(x_arr, y_arr)

    # スコアの確認
    # 0.9以上であればだいたいOK
    score = model.score(x_arr, y_arr)
    print("Score: %.2f" % (score))

    # モデルのテスト
    tmp_data = np.array([[7.4,2.8,6.1,1.9]])    # テストデータは行列(二次元配列)にする
    y = model.predict(tmp_data)

    for i in range(0, 4):
        print("%s: %f" % (df.columns[i], tmp_data[0][i]))
    print("の品種は")
    print(le.inverse_transform(y)[0])   # ラベルの数値を文字列に戻す

    return(0)


main()




【ポイント】
◯多層パーセプトロン(MLP, Multi-Layer Perceptron)とは、ニューラルネットワークの原始的なモデル。
◯今回は入力層が4ノード、中間層が100ノード、出力層が3ノードの3層MLP。
◯活性化関数はReLU。sigmoidなどでもOK。
◯簡単なモデルではあるが、この層が深くなると深層学習と呼ばれるモデルになる。今の生成AIなどで使われているモデルと原理は変わらない。
◯参考: https://qiita.com/maskot1977/items/d0253e1eab1ff1315dff
◯参考: https://qiita.com/nekotto/items/111bc5412ed0c000a9e6