post Image
Pythonの機械学習テンプレート

Pythonの機械学習テンプレート

毎回調べるのが面倒なので適当にまとめる. pandasの基礎はこちら.
githubはこちら.

まず, データ分析で使いそうな基本的なパッケージのインポート. (モデル以外)

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
import json
import pickle
from sklearn import metrics
from collections import defaultdict
from collections import Counter
import csv

ツール

使いそうなやつのまとめ.

AUC

from sklearn import metrics
def auc(train, predict):
    fpr, tpr, thresholds = metrics.roc_curve(train, predict)
    return  metrics.auc(fpr, tpr)

2クラス用

変数のセーブとロード

import pickle
def varSave(filename, var):
    fileObject = open(filename,'wb')
    pickle.dump(var, fileObject)
    fileObject.close()
    return

def varLoad(filename):
    fileObject = open(filename,'rb')  
    var = pickle.load(fileObject)  
    fileObject.close()
    return var

onehot

def onehot(target):
    return np.eye(np.unique(target).shape[0])[target]

targetは0-(n-1)の整数のカテゴリ値を持つとする.
事前にカテゴリ数がわかっているが, targetにすべて含まれているかわからない場合は,
onehot = lambda target, num: np.eye(num)[target]でよい.

PCA (主成分分析)

from sklearn.decomposition import PCA
def pca(X, dim):
    pca = PCA(n_components=dim)
    pca.fit(X)
    pca.transform(X)
    print (sum(pca.explained_variance_ratio_)) # 寄与率
    return pca.transform(X)

元の次元からdim次元へ減らす

AutoEncoder

from keras.layers import Input, Dense
from keras.models import Model
def autoenc(X, encoding_dim, epochs):
    input_dim = X.shape[1] # 入力次元
    # encode, decodeの深さ
    depth = 3
    # エンコーダー層
    input_img = Input(shape=(input_dim,))
    encoded = Dense(128, activation='relu')(input_img)
    encoded = Dense(64, activation='relu')(encoded)
    encoded = Dense(encoding_dim, activation='sigmoid')(encoded)
    # デコーダー層
    decoded = Dense(64, activation='relu')(encoded)
    decoded = Dense(128, activation='relu')(decoded)
    decoded = Dense(input_dim, activation='sigmoid')(decoded)
    # AutoEncoder
    autoencoder = Model(input_img, decoded)
    # エンコーダーモデル
    encoder = Model(input_img, encoded)
    # デコーダーモデル
    encoded_input = Input(shape=(encoding_dim,))
    decoder_layer = encoded_input
    for i in range(depth):
        decoder_layer = autoencoder.layers[i-depth](decoder_layer)
    decoder = Model(encoded_input, decoder_layer)
    # 最適化
    autoencoder.compile(optimizer='adam', loss='mean_squared_error')
    autoencoder.fit(X, X, epochs=epochs, batch_size=128, shuffle=True)
    return (encoder, decoder)

使用するデータに合わせて, 層の数やノード数を変える.

モデル

回帰や分類のモデルの紹介.
説明無しのコピペ用.

データセットの準備

まず, 試す用データセット:
回帰

boston = datasets.load_boston()
X=boston.data
y=boston.target
X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=1,test_size=0.1)

分類

iris = datasets.load_iris()
X = iris.data
y = iris.target
X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=1,test_size=0.1)

以下, 回帰と分類に分けて説明するが, 分類のモデルが回帰に使えるやつもあるので, 特に気にしないでいただきたい.

回帰

LASSO

from sklearn import linear_model
model= linear_model.Lasso(alpha=1, fit_intercept=True) # alpha: L1係数
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))
print(model.coef_)

リッジ回帰

from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0) # alpha: L2の係数
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))

ランダムフォレスト

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(max_depth=5, random_state=1, n_estimators=100)
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))

分類

ロジスティック回帰

from sklearn.linear_model import LogisticRegression
model = LogisticRegression(C=1,penalty="l1") # C: 損失の係数(正則化係数の逆数)
model.fit(X_train, y_train)
print (model.score(X_valid, y_valid))
print (model.predict(X_valid))
print (model.predict_proba(X_valid))

SVM

from sklearn.svm import LinearSVC
model = LinearSVC(C=1, penalty="l1", loss="squared_hinge", dual=False) # C: 損失の係数(正則化係数の逆数)
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))
print(model._predict_proba_lr(X_valid))
print(model.coef_)

kernel SVM

from sklearn.svm import SVC
model = SVC(C=1,kernel='rbf')
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))

事前に計算したカーネルを使いたいときは, precomputedを使う.

ランダムフォレスト

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X_train, y_train)
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))

LightGBM

import lightgbm as lgb
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_valid, y_valid, reference=lgb_train)
lgbm_params = {
    'objective': 'multiclass', #'xentropy',
    'num_class': 3,
    'metric': 'multi_logloss', #'auc',
    'num_leaves':15,
    # "min_data_in_leaf": 20,
    # "bagging_fraction":1,
    # "bagging_freq" : 10,
    # "feature_fraction":0.98
    "lambda_l1":0.1,
    "lambda_l2":0.01,
    # "min_gain_to_split":0.1
    # "max_depth":10
}
model = lgb.train(lgbm_params, lgb_train, valid_sets=lgb_eval, num_boost_round=2000, early_stopping_rounds=20)
print (model.predict(X_valid, num_iteration=model.best_iteration))
print(model.feature_importance())
lgb.plot_importance(model, ignore_zero=False,height=0.5)

xgboost

import xgboost as xgb
model = xgb.XGBClassifier()
model.fit(X_train, y_train, verbose=True)
print(model.predict(X_valid))
print(model.predict_proba(X_valid))
print(model.score(X_valid, y_valid))
print(model.feature_importances_)

catboost

import catboost
model = catboost.CatBoostClassifier(iterations=1000, 
                                    use_best_model=True, 
                                    eval_metric = "HingeLoss", #'AUC',
                                    random_seed=1, 
                                    l2_leaf_reg=3,
                                    depth=6,
                                    loss_function="MultiClass",#"CrossEntropy",
                                    classes_count=3
                                  )
model.fit(X_train, y_train, 
        # cat_features=categorical_features_index, 
        eval_set=(X_valid, y_valid),
        early_stopping_rounds=20
        )
print(model.predict(X_valid))
print(model.score(X_valid,y_valid))

ニューラルネット

from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
model = Sequential()
model.add(Dense(units=64, activation="relu", input_dim=X_train.shape[1]))
model.add(Dense(units=32, activation="relu"))
model.add(Dense(units=3, activation="softmax"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, onehot(y_train), epochs=200, batch_size=256)
model.predict_proba(X_valid, batch_size=256)

k近傍法

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
print(knn.score(X_valid,y_valid))
print(knn.predict_proba(X_valid))

『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。