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

今回は機械学習でよく使うPythonのプログラムコードをアルゴリズム別に紹介していきます。
そして、機械学習といえばScikit-Learn。Scikit-Learnでよく使うコードを紹介します。
最後におまけとして、PandasやNumpyでよく使うプログラムコードも紹介します。
これらのプログラムコードはコピペで利用できるのでブックマークしておくことをおすすめします!

これからエンジニアを目指して機械学習のPythonを学びたい方、エンジニア入門としてプログラムコードを書きたい方はこの記事を参考にしてください。

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

今後、AIのプログラミングについて詳しく学びたいと思っている方の中には、
自分でAIのことを学ぼうにもAIの作り方が全く分からない!AIの仕組みやプログラミングの基礎も知らないからどこから手をつけたらいいかわからない!なんて事もあると思います。
独学があまり好きじゃない、上手くいかないと言う人は手っ取り早くAIのセミナー講座を受けてしまうのもおすすめです!
AIは一見、初心者向けの講座なんてなさそうですが、全くAIが分からない人でも受けられる講座があります。
おすすめのセミナーを2つご紹介します。

ビジネス向けAI完全攻略セミナーの概要

AIビジネスセミナーは、AIの仕組みや作り方、ビジネスでAIを活用する方法を1日で学ぶことができるセミナーです。
プログラムコードを使わずにAIを作りながら学ぶことができるため、AIプロジェクトのマネージャーなどにおすすめのセミナーです!

AIビジネス活用セミナーの詳細はこちら

AIエンジニア向けセミナーの概要

AIエンジニア向けセミナー(3カ月育成ロングコース)は、AIプログラミングを3ヶ月で習得できる、AIエンジニア育成セミナーです。
いつでもどこでも学習できるパソコン、スマホ、タブレット対応のEラーニング学習の為、自分の都合の良いペースで取り組めます。
学習期間の目安は3ヶ月、全12回の講座を動画で視聴しながら自分のペースでしっかり学習できます。
内容は、実務で使えるAIの実装技術と活用術を習得できるおすすめのセミナーです!
もちろん非エンジニアの方でも、ゼロからプログラムの実装方法を学ぶことができます。

AIエンジニア向けセミナーの詳細はこちら

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

Scikit-Learn

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

# 基本のライブラリインポート手順

# アルゴリズム、データセット、などのライブラリをインポート
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 LinearRegression
linear_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 LogisticRegression
model = 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 GaussianNB

model.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 XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X = dataset[:,0:10]
Y = dataset[:,10:]
seed = 1

X_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 StandardScaler
scaler = StandardScaler().fit(X_train)
standardized_X = scaler.transform(X_train)
standardized_X_test = scaler.transform(X_test)
# Normalization(正規化)

from sklearn.preprocessing import Normalizer
scaler = Normalizer().fit(X_train)
normalized_X = scaler.transform(X_train)
normalized_X_test = scaler.transform(X_test)
# Binarization(二値化)

from sklearn.preprocessing import Binarizer
binarizer = Binarizer(threshold=0.0).fit(X)
binary_X = binarizer.transform(X)
# Encoding Categorical Features(文字列要素を数値コードに変換)

from sklearn.preprocessing import LabelEncoder
enc = 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 PolynomialFeatures
poly = PolynomialFeatures(5)
poly.fit_transform(X)

 

モデルの成果を評価する

分類結果を評価

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

回帰結果を評価

# Mean Absolute Error (平均絶対誤差)

from sklearn.metrics import mean_absolute_error
y_true = [5, -0.25, 3]
mean_absolute_error(y_true, y_pred)
# Mean Squared Error (平均二乗誤差)

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred)
# R² Score (決定係数)

from sklearn.metrics import r2_score
r2_score(y_true, y_pred)

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

# Adjusted Rand Index (ランド指数)

from sklearn.metrics import adjusted_rand_score
adjusted_rand_score(y_true, y_pred)
# Homogeneity (均一性)

from sklearn.metrics import homogeneity_score
homogeneity_score(y_true, y_pred)
# V-measure

from sklearn.metrics import v_measure_score
metrics.v_measure_score(y_true, y_pred)

交差検証

from sklearn.cross_validation import cross_val_score

print(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講座は…

こちらの2つが主におすすめのAI講座になっています!
AIビジネスセミナーは、AIの仕組みや作り方、ビジネスでAIを活用する方法を1日で学ぶことができるセミナーです。
プログラムコードを使わずにAIを作りながら学ぶことができるため、AIプロジェクトのマネージャーなどにおすすめのセミナーです!
また、AIエンジニア向けセミナーは、AIプログラミングを3ヶ月で習得できる、AIエンジニア育成セミナーです。いつでもどこでも学習できるパソコン、スマホ、タブレット対応のEラーニング学習となっており、学習期間の目安は3ヶ月、全12回の講座を動画で視聴しながら自分のペースでしっかり学習できます。
プログラミング手法、基礎AIの実装から応用AIの実装までを学び、ライブラリの使い方も学べるのでAIモデルが使えるようになります。最終的には、高度なデータ処理をも学ぶことでAIプログラミングマスターを目指すカリキュラムです。

ビジネス向けAI完全攻略セミナー」や、「AIエンジニア向けセミナー」に参加すれば、AI理論やPythonプログラミングの基礎から、ライブラリを使用したディープラーニングの実装など、実務に繋がる分野まで学ぶことができます。
どちらのセミナーも初心者向けで、AIが全く分からなくても受けられる講座とのことなので安心です。
この機会にセミナーを受講してみてはいかがでしょうか!?
席数に限りがございますのでお早めにお申し込みくださいね!

さらに、JDLA認定のE資格対策講座を受けたい場合、、AI研究所が開催しているE資格対策短期集中講座という、最短でE資格の合格を目指すセミナーもございます。
E資格試験の受験資格を得るためには、日本ディープラーニング協会(JDLA)が認定したプログラムの受講修了が必須となります。
日本ディープラーニング協会にて規定されている出題範囲をすべてカバーしているセミナーなので、常に最新のE資格に完全対応しており、試験対策を中心に、E資格に合格するためのポイントを絞って学習できます。
本講座を修了することで、E資格の受験資格を短期間で確実に取得することができます。

最新情報をチェックしよう!