
目次
- 1 機械学習で頻繁に使うPythonのプログラムコード一覧
- 1.1 AIのプログラミングについて学ぶならAIプログラミングセミナーがおすすめ
- 1.2 Scikit-Learn
- 1.3 Linear Regression(線形回帰)
- 1.4 LogisticRegression(ロジスティック回帰)
- 1.5 Decision Tree(決定木)
- 1.6 SVM (サポートベクターマシン)
- 1.7 Naive Bayes (ナイーブベイズ)
- 1.8 kNN (K近傍法)
- 1.9 K-Means(K平均法)
- 1.10 Random Forest(ランダムフォレスト)
- 1.11 Dimensionality Reduction Algorithms(次元削減)
- 1.12 Gradient Boosting Algorithms(勾配ブースティング)
- 1.13 XGBoost
- 2 Scikit-Learn目的別
機械学習で頻繁に使うPythonのプログラムコード一覧
今回は機械学習でよく使うPythonのプログラムコードをアルゴリズム別に紹介していきます。
そして、機械学習といえばScikit-Learn。Scikit-Learnでよく使うコードを紹介します。
最後におまけとして、PandasやNumpyでよく使うプログラムコードも紹介します。
これらのプログラムコードはコピペで利用できるのでブックマークしておくことをおすすめします!
これからエンジニアを目指して機械学習のPythonを学びたい方、エンジニア入門としてプログラムコードを書きたい方はこの記事を参考にしてください。
AIのプログラミングについて学ぶならAIプログラミングセミナーがおすすめ
AIのプログラミングや機械学習、Pythonについてもっと学びたい方は「AIエンジニアになるための3日間集中セミナー」を受講することをおすすめします。
セミナーの詳細はこちら
このセミナーでは、AIエンジニアに必要なAIのプログラミングスキルや、 AIの仕組みを理解したデータの処理方法をPythonのプログラム演習を通して学ぶことができるため、これからAIのエンジニアを目指している方や、ビジネスで機械学習・AIを活用したい方におすすめのセミナーです。
受講形態 | 会場受講 / ライブウェビナー / Eラーニング |
---|---|
定員 | 6〜8名 |
必要な前提スキル | 前提スキルは必要ありません。どなたでも学べるわかりやすいエンジニアセミナーです。 AIエンジニア・機械学習に少しでも興味があればOK! |
セミナーページ | https://ai-kenkyujo.com/ai-technical/ |
席数に限りがございますのでお早めにお申し込みください!
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目的別
Scikit-Learnについて更に詳しく知りたい方は、「Scikit-learnとは?5分で分かるScikit-learnのメリットや機能まとめ」も参考にしてみてください。
データ前処理
# 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
# 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/ |
席数に限りがございますのでお早めにお申し込みください!