この章では、データセットを使用し、データの前処理から機械学習モデルの構築、モデルの評価、さらにはチューニングやデプロイに至るまでの一連のプロセスを通して、実際の業務やプロジェクトに応用できる知識を提供します。
最初に取り組むべきは、使用するデータセットの選定です。一般的に、初学者が扱いやすいデータセットとして、以下のようなものが考えられます。
ここでは、初心者でも取り組みやすく、また実務にもつながるタスクとして、Titanic生存者予測データセットを使用します。このデータは、Kaggleでも非常に人気のあるデータセットで、初学者が学びながら実際のプロジェクトに応用できる要素が詰まっています。
まず、Pandasを使用してデータセットを読み込みます。Kaggleからデータをダウンロードし、以下のコードで読み込むことができます。
import pandas as pd
# データセットの読み込み
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
# データの先頭部分を表示
print(train_data.head())
ここでは、train.csv
がトレーニングデータ、test.csv
がテストデータです。train.csv
は、生存者の情報が含まれており、機械学習モデルの訓練に使用します。test.csv
は、生存者の情報が含まれておらず、予測結果をKaggleに提出する際に使用されます。
次に、データの内容を確認し、前処理を行います。機械学習モデルを構築する前に、データに欠損値や外れ値がないか確認することが重要です。
# データの情報を確認
print(train_data.info())
# 欠損値の確認
print(train_data.isnull().sum())
この出力により、データセットの各列にどれだけの欠損値があるかを確認できます。例えば、Age
(年齢)やCabin
(キャビン)の情報に欠損値が多く含まれていることがわかるかもしれません。
欠損値がある場合、その処理方法には主に以下の方法があります。
ここでは、年齢の欠損値を年齢の中央値で埋め、キャビンの情報は削除します。
# Ageの欠損値を中央値で埋める
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
# Cabin列を削除
train_data.drop(columns='Cabin', inplace=True)
# 再度、欠損値を確認
print(train_data.isnull().sum())
次に、Sex
(性別)やEmbarked
(乗船した港)のようなカテゴリデータは、そのままでは機械学習モデルに使用できないため、数値に変換します。これには、pd.get_dummies
を使用します。
# 性別を数値に変換
train_data['Sex'] = train_data['Sex'].map({'male': 0, 'female': 1})
# Embarkedのダミー変数を作成
train_data = pd.get_dummies(train_data, columns=['Embarked'])
# データの確認
print(train_data.head())
これにより、性別が 0
(男性)と 1
(女性)に変換され、Embarked
が複数の列に分割されて数値化されます。
データが前処理されましたので、次にデータをトレーニングセットとテストセットに分割します。これは、モデルの評価に使用します。
from sklearn.model_selection import train_test_split
# 目的変数と特徴量に分割
X = train_data.drop(columns=['Survived'])
y = train_data['Survived']
# トレーニングセットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f'Training data shape: {X_train.shape}')
print(f'Test data shape: {X_test.shape}')
これでデータが準備できました。次に、モデルを構築していきます。
まず、基本的な分類モデルとして、ロジスティック回帰を使用してモデルを構築します。scikit-learn
ライブラリの LogisticRegression
を使用して実装します。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# ロジスティック回帰モデルのインスタンスを作成
model = LogisticRegression(max_iter=1000)
# モデルをトレーニング
model.fit(X_train, y_train)
# テストデータで予測
y_pred = model.predict(X_test)
# モデルの精度を評価
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')
ここでは、LogisticRegression
を使用してモデルを訓練し、テストデータでの精度を確認しています。機械学習プロジェクトでは、精度だけでなく他の評価指標も確認する必要があります。
ロジスティック回帰以外にも、他の分類アルゴリズムを試してみることが有益です。例えば、決定木やランダムフォレストを使用することで、異なるアプローチからモデルのパフォーマンスを向上させることができます。
from sklearn.tree import DecisionTreeClassifier
# 決定木モデルのインスタンスを作成
tree_model = DecisionTreeClassifier()
# モデルをトレーニング
tree_model.fit(X_train, y_train)
# テストデータで予測
y_pred_tree = tree_model.predict(X_test)
# モデルの精度を評価
accuracy_tree = accuracy_score(y_test, y_pred_tree)
print(f'Decision Tree Accuracy: {accuracy_tree:.4f}')
from sklearn.ensemble import RandomForestClassifier
# ランダムフォレストモデルのインスタンスを作成
rf_model = RandomForestClassifier()
# モデルをトレーニング
rf_model.fit(X_train, y_train)
# テストデータで予測
y_pred_rf = rf_model.predict(X_test)
# モデルの精度を評価
accuracy_rf = accuracy_score(y_test, y_pred_rf)
print(f'Random Forest Accuracy: {accuracy_rf:.4f}')
これで、複数のアルゴリズムを使用してモデルを構築し、どのモデルが最も高い精度を示すか比較することができます。
モデルの精度をさらに向上させるためには、ハイパーパラメータのチューニングが重要です。GridSearchCV
を使用して、モデルの最適なパラメータを探索することができます。
from sklearn.model_selection import GridSearchCV
# ハイパーパラメータの候補を定義
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
# GridSearchCVを使用して最適なパラメータを探索
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
# トレーニング
grid_search.fit(X_train, y_train)
# 最適なパラメータを表示
print(f'Best Parameters: {grid_search.best_params_}')
これにより、ランダムフォレストの最適なハイパーパラメータを見つけ出すことができ、モデルのパフォーマンスを向上させることができます。
モデルが完成したら、実際に運用環境にデプロイすることを検討します。簡単な方法としては、予測結果をファイルに保存し、APIやウェブアプリケーションとして提供することです。
# テストデータに対して予測
predictions = model.predict(test_data)
# 予測結果を保存
submission = pd.DataFrame({
'PassengerId': test_data['PassengerId'],
'Survived': predictions
})
submission.to_csv('submission.csv', index=False)
このようにして、予測結果をKaggleなどのプラットフォームに提出できる形式で保存することができます。
この章では、Titanicデータセットを使用して、Pythonで実際の機械学習プロジェクトを進める方法について学びました。データの前処理、モデルの構築、チューニング、さらにはデプロイまでの一連の流れを体験しました。これらのスキルは、実務でも役立つものですので、ぜひ自分のプロジェクトに応用してみてください。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓