機械学習によく使うPythonのコード一覧まとめ

今回は機械学習でよく使うPythonのプログラムコードをアルゴリズム別に紹介していきます。
そして、機械学習といえばScikit-Learn。Scikit-Learnでよく使うコードを紹介します。
最後におまけとして、PandasやNumpyでよく使うプログラムコードも紹介します。
これらのプログラムコードはコピペで利用できるのでブックマークしておくことをおすすめします!
これからエンジニアを目指して機械学習のPythonを学びたい方、エンジニア入門としてプログラムコードを書きたい方はこの記事を参考にしてください。

AIのプログラミングについて学ぶならAIプログラミングセミナーがおすすめ

今後、AIのプログラミングについて詳しく学びたいと思っている方には、AIエンジニア向けセミナーがおすすめです。
AIエンジニア向けセミナーを受講することでプログラミング言語Pythonを利用したAIの実装方法を身につけることができます。

機械学習で頻繁に使うPythonのプログラムコード一覧

Scikit-Learn

Python

まずは、基本的なプログラムコードの流れを抑えておきましょう。

# 基本のライブラリインポート手順# アルゴリズム、データセット、などのライブラリをインポートfrom sklearn import neighbors, datasets, preprocessing# トレーニング用とテスト用に分けてくれる便利な関数from sklearn.model_selection import train_test_split# 予測に対する正解率(accuracy)を出すために必要from sklearn.metrics import accuracy_score# 基本の学習方法手順# データセットからアヤメの花のデータを取り出す。iris = datasets.load_iris()# データの列0番目から1番目までの全行をXに入れて、# データの目的変数をyに入れる。X, y = iris.data[:, :2], iris.target# トレーニング用とテスト用に分ける。X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)# StandardScalerを使ってデータセットを標準化する。scaler = preprocessing.StandardScaler().fit(X_train)# 実際の変換作業。X_train = scaler.transform(X_train)X_test = scaler.transform(X_test)# K近傍法を使ってモデルを作成。knn = neighbors.KNeighborsClassifier(n_neighbors=5)# トレーニング用データで学習をさせる。knn.fit(X_train, y_train)# テスト用データで予測値を出す。y_pred = knn.predict(X_test)# 正解率をテスト用目的変数と予測値を使って計算する。accuracy_score(y_test, y_pred)

Linear Regression(線形回帰)

from sklearn.linear_model import LinearRegressionlinear_model = linear_model.LinearRegression()linear_model.fit(X_train,y_train)# R2(決定係数)linear_model.score(X_test,y_test)# coefficient(偏回帰係数)print('偏回帰係数: ', linear_model.coef_)# indercept(切片)print('切片: ', linear_model.intercept_)#予測値を出す。predicted = linear_model.predict(X_test)

LogisticRegression(ロジスティック回帰)

線形回帰と似てますが、
目的変数が0か1、YES・NOなどの時に使います。

from sklearn.linear_model import LogisticRegressionmodel = model.LogisticRegression()model.fit(X_train,y_train)# R2(決定係数)model.score(X_test,y_test)# coefficient(偏回帰係数)print('偏回帰係数: ', model.coef_)# indercept(切片)print('切片: ', model.intercept_)#予測値を出す。predicted = model.predict(X_test)

Decision Tree(決定木)

from sklearn import tree# 不純度の指標をジニ係数にする。エンロトピーと使い分ける必要がある。model = tree.DecisionTreeClassifier(criterion='gini')model.fit(X_train, y_train)model.score(X_test, y_test)predicted = model.predict(X_test)

SVM (サポートベクターマシン)

from sklearn import svm# クラス分類問題において、データの数がそこまで大きくない場合は# SVC(Linear SVM)を使います。model = svm.svc() model.fit(X_train, y_train)model.score(X_test, y_test)predicted= model.predict(X_test)

Naive Bayes (ナイーブベイズ)

# 数種類あるうちのガウシアン分布(正規分布)# を使ったベイズ分類器をインポートfrom sklearn.naive_bayes import GaussianNBmodel.fit(X_train, y_train)predicted= model.predict(X_test)

kNN (K近傍法)

from sklearn.neighbors import KNeighborsClassifier# n_neighbors:Kの数はデフォルトでは5に設定されている。KNeighborsClassifier(n_neighbors=6)model.fit(X_train, y_train)predicted= model.predict(X_test)

K-Means(K平均法)

from sklearn.cluster import KMeans # n_clusters:何個にクラス分けするか、random_stateは0に設定。k_means = KMeans(n_clusters=3, random_state=0)model.fit(X)predicted= model.predict(x_test)

Random Forest(ランダムフォレスト)

from sklearn.ensemble import RandomForestClassifier# 決定木の深さを100に設定model= RandomForestClassifier(max_depth=100)model.fit(X, y)predicted= model.predict(x_test)# 深さ100の時の各特徴量の重要性。print(model.feature_importances_)

Dimensionality Reduction Algorithms(次元削減)

# PCA (線形アルゴリズム)を使用from sklearn.decomposition import PCA# n_components:2次元に次元を削減するpca = PCA(n_components=2)# トレーニング用のデータセットの次元をPCAを用いて削減する。train_reduced = pca.fit_transform(train)# テスト用のデータセットの次元をPCAを用いて削減する。test_reduced = pca.transform(test)

Gradient Boosting Algorithms(勾配ブースティング)

from sklearn.ensemble import GradientBoostingClassifier# n_estimators: 決定木の数# learning_rate: 結果に対する各決定木の影響度合。小さい値が良いとされているが、# 大きい数値で試した後小さい数値にして試すのがセオリー。# max_depth: 決定木の深さ。model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)model.fit(X, y)predicted= model.predict(x_test)

XGBoost

XGBoostとは,先程のGradient Boostingと
Random Forestsを組み合わせたアンサンブル学習である。
アンサンブル学習とは、複数のモデル(学習器)を使い、
1つの学習モデルを作成する手法です。
pythonパッケージのインストールは以下のURLを参考にしてください。

https://github.com/dmlc/xgboost/tree/master/python-package

 

from xgboost import XGBClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoreX = dataset[:,0:10]Y = dataset[:,10:]seed = 1X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed)model = XGBClassifier()model.fit(X_train, y_train)y_pred = model.predict(X_test)

Scikit-Learn目的別

Python

Scikit-Learnについて更に詳しく知りたい方は、「Scikit-learnとは?5分で分かるScikit-learnのメリットや機能まとめ」の記事や、冒頭でもご紹介したAIエンジニア向けセミナーもチェックしてみてください。

データ前処理

# Standardization(標準化)from sklearn.preprocessing import StandardScalerscaler = StandardScaler().fit(X_train)standardized_X = scaler.transform(X_train)standardized_X_test = scaler.transform(X_test)
# Normalization(正規化)from sklearn.preprocessing import Normalizerscaler = Normalizer().fit(X_train)normalized_X = scaler.transform(X_train)normalized_X_test = scaler.transform(X_test)
# Binarization(二値化)from sklearn.preprocessing import Binarizerbinarizer = Binarizer(threshold=0.0).fit(X)binary_X = binarizer.transform(X)
# Encoding Categorical Features(文字列要素を数値コードに変換)from sklearn.preprocessing import LabelEncoderenc = LabelEncoder()y = enc.fit_transform(y)
# Imputing Missing Values(欠損値の穴埋め。)from sklearn.preprocessing import Imputer# strategyで平均か中央値か最頻値を選択。imp = Imputer(missing_values=0, strategy='mean', axis=0)imp.fit_transform(X_train)
# Generating Polynomial Features (多項式の特徴量を作る)from sklearn.preprocessing import PolynomialFeaturespoly = PolynomialFeatures(5)poly.fit_transform(X)

 

モデルの成果を評価する

分類結果を評価

# Accuracy Score (正解率)knn.score(X_test, y_test)from sklearn.metrics import accuracy_scoreaccuracy_score(y_test, y_pred)
# Classification Report (結果の詳細なレポートを表示)from sklearn.metrics import classification_reportprint(classification_report(y_test, y_pred))
# Confusion Matrix (混同行列)# 正しく識別できた件数、誤って識別した件数を比較from sklearn.metrics import confusion_matrixprint(confusion_matrix(y_test, y_pred))

回帰結果を評価

# Mean Absolute Error (平均絶対誤差)from sklearn.metrics import mean_absolute_errory_true = [5, -0.25, 3]mean_absolute_error(y_true, y_pred)
# Mean Squared Error (平均二乗誤差)from sklearn.metrics import mean_squared_errormean_squared_error(y_test, y_pred)
# R² Score (決定係数)from sklearn.metrics import r2_scorer2_score(y_true, y_pred)

クラスタリング結果を評価

# Adjusted Rand Index (ランド指数)from sklearn.metrics import adjusted_rand_scoreadjusted_rand_score(y_true, y_pred) 
# Homogeneity (均一性)from sklearn.metrics import homogeneity_scorehomogeneity_score(y_true, y_pred) 
# V-measurefrom sklearn.metrics import v_measure_scoremetrics.v_measure_score(y_true, y_pred)

交差検証

from sklearn.cross_validation import cross_val_scoreprint(cross_val_score(knn, X_train, y_train, cv=4))print(cross_val_score(lr, X, y, cv=2)) 

学習モデルの調整

グリッドサーチ

from sklearn.grid_search import GridSearchCV# 最適化したいパラメータを設定params = {"n_neighbors": np.arange(1,3), "metric": ["euclidean", "cityblock"]}# パラメータを最適化grid = GridSearchCV(estimator=knn, param_grid=params)grid.fit(X_train, y_train)print(grid.best_score_)print(grid.best_estimator_.n_neighbors

ランダムサーチ

from sklearn.grid_search import RandomizedSearchCV# 最適化したいパラメータを設定params = {"n_neighbors": range(1,5), "weights": ["uniform", "distance"]}rsearch = RandomizedSearchCV(estimator=knn, param_distributions=params, cv=4, n_iter=8, random_state=5)rsearch.fit(X_train, y_train)print(rsearch.best_score_)  

 

Numpy

Python

# Numpy配列を作り、同時に2行4列にする。np.array([1,2,3,5,6,7,8,9]).reshape(2,4)# ゼロ埋めnp.zeros((3,4))# 1で埋めるnp.ones((2,3,4),dtype=np.int16)# ランダムな要素をもつ4行5列の配列を作るnp.empty((4, 5))# 10から25までの整数を5間隔の配列にするnp.arange(10,25,5) # 0から2までを等間隔で9に分割np.linspace(0,2,9)# 正規分布の乱数を100個生成np.random.randn(100)# 20から100までの整数の中から一つだけランダムで選ぶnp.random.randint(20,100)# 転置# bは3行5列の配列t = np.T(b)# tは5行3列の配列に入れ替わる# 行列の掛け算np.dot(t,b)# 配列の連結# axis=1は列方向への結合# axis=0は行方向への結合a=np.array([[1,2,3,4,5,6],[1,2,3,4,5,6]])d=np.array([[1,2,3,4,5,6],[1,2,3,4,5,6]])np.concatenate((a,d),axis=1)np.concatenate((a,d),axis=0) # 行方向への結合np.vstack((a,b)) # 列方向への結合np.hstack((e,f)) # 列方向に指定した数で等分する。np.hsplit(matrix_arr,3) # 行方向に指定した数で等分する。np.vsplit(matrix_arr,2) 

 

pandas

# データフレームを作るcolumns = ['A','B','C']rows = [[1,2,3],[4,5,6],[7,8,9]]df = pd.DataFrame(rows,columns=columns)# ファイルを読み込む。df = pd.read_csv('file.csv')df = pd.read_json('file.json')df = pd.read_excel('file.xlsx')# ファイルを書き込む。df.to_csv('file.csv')df.to_json('file.json')df.to_excel('file.xlsx')# URLからでも読み込めるdf = pd.read_csv('http://example/bacon/spam/ham/egg/file.csv')# エクセルシートで指定してデータフレームを作る。xlsx = pd.ExcelFile('file.xlsx')df = pd.read_excel(xlsx, 'Sheet1')# 行と列を整数で指定df.iloc[[0],[0]]# 列を文字列で指定df.loc[[0], ['Country']]# 条件を指定して行や列の値を取るdf[df['A']>2]  df[df['B']==1]# 行や列に関数を働かせるdf['A'].apply(str)df['A'].apply(lambda x: str(x) if x>2 else x)# 欠損値を見つけ、欠損値を削除df.isnull()# すべてが欠損値の行であれば、その行は削除される。df.dropna(how='all')# axis=1なら行方向が削除される。# つまり、すべてが欠損値の列であれば、その列は削除される。df.dropna(how='all', axis=1)# howにanyを指定すると、# 欠損値が一つでも含まれる行が削除される。df2.dropna(how='any')# axis=1にすると列に適用。つまり行方向に適用。# 欠損値が一つでも含まれる列が削除される。df2.dropna(how='any', axis=1)# 新しい列を加える。# 目的変数や分析結果を加えるさいに便利。df['new_columns'] = new_row# 基本的だが本当によく使う# 行列数を表示df.shape# インデックスの情報df.index # 列の情報を表示df.columns# 欠損値やオブジェクトタイプを調べるさいに便利 df.info()# ユニークなオブジェクトの個数をカウントdf.count()# axisなどで行方向や列方向も指定できるものがある。# すべての列を足すdf.sum() # 一つ上の行から順番に足して表示df.cumsum()# 最小値、最大値を表示df.min()/df.max()# 最大値・最小値の要素のインデックス(ラベル)が取得できる。df.idxmin()/df.idxmax()#  平均値や偏差や最大値などの数値情報がまとめて表示される。df.describe()# 平均値を求める。df.mean()  # 中央値を取得するdf.median()

以上ですが、機械学習に限らず上記のライブラリには、様々な用途でまだまだ沢山の量のプログラムコードがあります。
全てを覚える必要もないですが、ある程度はすぐにでも使える状態になれば Python初心者でも、プログラミングが早くなるのではないでしょうか。
ただこの記事をお気に入りにしておけばいつでもプログラムコードが確認できるので、Pythonで機械学習を勉強されるエンジニアの方はは上手くご利用頂ければと思います。

Pythonプログラミングで機械学習が学べるおすすめのセミナーの紹介

今回紹介したPythonのプログラムコードはどれもコピペで活用でき有用なものばかりです。
ですが、コピペされているコードの意味の理解や実務への応用など、初心者にとってはハードルが高いことも多いですよね。
そこで紹介したいのがAI研究所主催の「AIエンジニアになるための3日間集中セミナー」です。

セミナーの詳細はこちら

このセミナーは前提スキルを必要とせず、

  • Pythonプログラミングの入門
  • 機械学習モデルの環境構築
  • Numpy,Scikit-learnなどのライブラリを活用した実装
  • 数値や画像データの前処理手法

などをたった3日間で学ぶことができます。
AIに精通した講師が、「わかりやすく伝える」ことを徹底して考え抜いて構成されたセミナーなので、業界を代表する企業の方の参加も多いです。
実際にAIエンジニアに転職できたという方や、AIの専門家・機械学習の専門家ともビジネスにおいて対等にやり取りができるようになったという声も届いており大好評。
このセミナーを受講すれば、機械学習の方法に関するイメージがしやすくなります。
今後の勉強の効率も飛躍的にアップしますよ。
受講形式は東京会場とライブウェビナーのいずれかをお選びいただけます。
即戦力のAIエンジニアとして早く活躍したいと思っている方にはおすすめです。

受講形態会場受講 / ライブウェビナー / Eラーニング
定員6〜8名
必要な前提スキル前提スキルは必要ありません。どなたでも学べるわかりやすいエンジニアセミナーです。
AIエンジニアに少しでも興味があればOK!
セミナーページhttps://ai-kenkyujo.com/ai-technical/

席数に限りがございますのでお早めにお申し込みください!

最新情報をチェックしよう!
企業向けAI人材育成サービス

企業向けAI人材育成サービス

AI事業発足やAI導入に必要な人材育成のステップとAI研究所が提供するサービス。AI研究所の人材育成サービスでは、3つのステップを軸に御社の業務内でAIを活用できる人材育成やAIプロジェクトの支援を行います。

CTR IMG