機械学習モデルを作成する際、まず必要なのが「データセット」です。データセットとは、観測されたデータや収集されたデータの集合のことで、モデルが学習に使用する材料です。通常、データセットは多次元の特徴量(フィーチャー)と、ターゲット変数(目的変数、ラベル)から構成されます。ここでは、Pythonを使ってどのようにデータセットを取り扱うのか、基本的な概念と方法について説明します。
データセットは以下のように分類できます。
機械学習においては、主に構造化データを扱うことが多いですが、テキスト分類や画像認識では非構造化データも使用します。
Pythonでは、データセットを取得するためにいくつかの方法があります。以下の方法が一般的です。
たとえば、KaggleのAPIを使ってデータをダウンロードする例を見てみましょう。まず、Kaggleアカウントを作成し、APIトークンを取得して設定します。次に、Pythonで以下のようにデータセットをダウンロードします。
!kaggle datasets download -d uciml/iris
ダウンロードしたデータを読み込むには、Pandasライブラリを使用します。Pandasは、データ操作に特化した強力なPythonライブラリで、機械学習の前処理や分析に不可欠です。
import pandas as pd
# CSVファイルからデータを読み込む
df = pd.read_csv('iris.csv')
# データセットの概要を表示
print(df.head())
上記のコードでは、read_csv
関数を使ってCSV形式のデータを読み込み、最初の5行を表示しています。
データセットを取得したら、次にその基本的な構造を理解することが重要です。Pandasを使ってデータフレームの形状、列名、データ型、統計情報などを確認できます。これにより、どのようなデータが含まれているのかを把握できます。
# データの形状を確認
print(df.shape)
# データの列名を確認
print(df.columns)
# データ型を確認
print(df.dtypes)
# 基本的な統計情報を表示
print(df.describe())
describe()
メソッドは、数値データに関する基本的な統計情報(平均、標準偏差、最小値、四分位範囲、最大値など)を提供します。これにより、各特徴量の値の範囲や分布を簡単に把握することができます。
データ前処理は、モデルがデータを正しく理解し、適切に学習できるようにするためのステップです。データセットには、欠損値や外れ値、異なるスケールを持つ特徴量などが含まれていることが多いため、これらを処理してデータをクリーンな状態に整える必要があります。
欠損値(Missing Data)は、多くのデータセットで見られる問題です。欠損値が含まれていると、モデルが正確に学習できないため、欠損値の処理はデータ前処理の重要なステップです。欠損値の処理方法としては、以下のようなものがあります。
まずは、欠損値があるかどうかを確認します。Pandasを使うと簡単に確認できます。
# 欠損値の確認
print(df.isnull().sum())
次に、欠損値を処理する方法をいくつか見ていきましょう。
行や列の削除
欠損値が多く含まれている場合、その行や列を削除することが一般的です。
# 欠損値を含む行を削除
df_dropped = df.dropna()
# 欠損値を含む列を削除
df_dropped_columns = df.dropna(axis=1)
ただし、重要な特徴量が含まれている場合には、削除はデータの損失につながるため、慎重に行う必要があります。
欠損値の補完
欠損値を削除する代わりに、他の値で補完することも可能です。補完方法としては、平均値、中央値、最頻値、または他の統計的手法があります。Pandasのfillna
メソッドを使って補完ができます。
# 平均値で補完
df_filled = df.fillna(df.mean())
# 中央値で補完
df_filled_median = df.fillna(df.median())
# 最頻値で補完
df_filled_mode = df.fillna(df.mode().iloc[0])
データセット内の特徴量が異なるスケールを持っている場合、モデルの学習に悪影響を与えることがあります。例えば、年齢が0から100の範囲で表され、収入が0から10,000,000の範囲で表される場合、収入の影響が年齢よりも大きくなりがちです。これを防ぐために、データのスケーリングや正規化を行います。
scikit-learn
ライブラリのStandardScaler
やMinMaxScaler
を使って、データをスケーリングできます。
標準化の例
from sklearn.preprocessing import StandardScaler
# 標準化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
正規化の例
from sklearn.preprocessing import MinMaxScaler
# 正規化
scaler = MinMaxScaler()
df_normalized = scaler.fit_transform(df)
スケーリングを行うことで、すべての特徴量が同じスケールに揃うため、モデルの学習におけるバイアスを防ぎます。
データセットに数値データだけでなく、カテゴリカルデータ(カテゴリ値)が含まれている場合、それらを数値データに変換する必要があります。カテゴリカルデータを処理する方法としては、次のような方法があります。
Pandasのget_dummies
メソッドを使うと、簡単にワンホットエンコーディングができます。
# ワンホットエンコーディング
df_encoded = pd.get_dummies(df, columns=['カテゴリ列'])
ワンホットエンコーディングを行うことで、モデルはカテゴリカルデータを数値として扱えるようになります。
データの準備が整ったら、次に行うべきはデータの可視化です。データの可視化は、データの分布や相関関係、異常値(アウトライアー)などを直感的に理解するための強力な手段です。Pythonには、MatplotlibやSeabornなどの強力な可視化ライブラリがあり、これらを使ってデータをグラフィカルに表現できます。
データの分布を理解するためには、ヒストグラムやボックスプロットなどが有効です。まず、各特徴量の分布を確認して、異常な値や偏りがないかを調べます。
import matplotlib.pyplot as plt
# ヒストグラムを作成
df.hist(bins=20, figsize=(10,10))
plt.show()
ヒストグラムは、データの値の範囲をいくつかのビン(区間)に分けて、その区間に含まれるデータの数を表示するグラフです。これにより、特徴量がどのように分布しているかを視覚的に確認できます。
次に、特徴量同士の相関関係を確認します。特に線形回帰などのモデルでは、特徴量間の相関関係が強いと、多重共線性の問題が生じる可能性があります。相関行列とヒートマップを使って、データの相関を視覚化します。
import seaborn as sns
# 相関行列の計算
corr_matrix = df.corr()
# ヒートマップの作成
plt.figure(figsize=(10,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
このヒートマップでは、特徴量間の相関係数が視覚的に表現されており、どの特徴量が強い相関を持っているかを一目で確認できます。
外れ値(アウトライアー)は、データセット内の他のデータ点から大きく外れた値を指し、モデルの学習に悪影響を及ぼす可能性があります。ボックスプロットを使って、外れ値を視覚化して検出することができます。
# ボックスプロットの作成
plt.figure(figsize=(10,6))
sns.boxplot(data=df)
plt.show()
ボックスプロットでは、データの四分位範囲を基に外れ値が表示されます。通常、ヒゲの範囲外にあるデータ点が外れ値としてマークされます。外れ値が検出された場合、それを削除するか、適切に処理する必要があります。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓