3.1 データセットの概要
機械学習モデルを作成する際、まず必要なのが「データセット」です。データセットとは、観測されたデータや収集されたデータの集合のことで、モデルが学習に使用する材料です。通常、データセットは多次元の特徴量(フィーチャー)と、ターゲット変数(目的変数、ラベル)から構成されます。ここでは、Pythonを使ってどのようにデータセットを取り扱うのか、基本的な概念と方法について説明します。
3.1.1 データセットの種類
データセットは以下のように分類できます。
- 構造化データ: 整理された行と列の形式を持ち、表形式で表されるデータ。CSVやSQLデータベースに保存されることが多い。
- 非構造化データ: 明確な形式を持たないデータ。画像、テキスト、オーディオ、ビデオなどが該当する。
- 半構造化データ: 形式がある程度決まっているが、完全には統一されていないデータ。JSONやXMLなど。
機械学習においては、主に構造化データを扱うことが多いですが、テキスト分類や画像認識では非構造化データも使用します。
3.1.2 データセットの取得方法
Pythonでは、データセットを取得するためにいくつかの方法があります。以下の方法が一般的です。
- ローカルファイルからの読み込み: CSVやExcelなどのファイル形式から読み込む。
- オンラインリポジトリからの取得: KaggleやUCI Machine Learning Repositoryなど、機械学習に使えるデータセットを提供しているウェブサイトからダウンロード。
- APIからのデータ取得: Twitter APIやGoogle Maps APIなど、APIを通じてリアルタイムデータを取得。
たとえば、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行を表示しています。
3.1.3 データの基本構造と特徴量
データセットを取得したら、次にその基本的な構造を理解することが重要です。Pandasを使ってデータフレームの形状、列名、データ型、統計情報などを確認できます。これにより、どのようなデータが含まれているのかを把握できます。
# データの形状を確認
print(df.shape)
# データの列名を確認
print(df.columns)
# データ型を確認
print(df.dtypes)
# 基本的な統計情報を表示
print(df.describe())
describe()
メソッドは、数値データに関する基本的な統計情報(平均、標準偏差、最小値、四分位範囲、最大値など)を提供します。これにより、各特徴量の値の範囲や分布を簡単に把握することができます。
3.2 データ前処理(欠損値処理、データの正規化)
データ前処理は、モデルがデータを正しく理解し、適切に学習できるようにするためのステップです。データセットには、欠損値や外れ値、異なるスケールを持つ特徴量などが含まれていることが多いため、これらを処理してデータをクリーンな状態に整える必要があります。
3.2.1 欠損値の処理
欠損値(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])
3.2.2 データのスケーリングと正規化
データセット内の特徴量が異なるスケールを持っている場合、モデルの学習に悪影響を与えることがあります。例えば、年齢が0から100の範囲で表され、収入が0から10,000,000の範囲で表される場合、収入の影響が年齢よりも大きくなりがちです。これを防ぐために、データのスケーリングや正規化を行います。
- 標準化(Standardization): 平均を0、標準偏差を1にする変換。データの分布を均等にするのに役立ちます。
- 正規化(Normalization): データを0から1の範囲にスケーリングする変換。
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)
スケーリングを行うことで、すべての特徴量が同じスケールに揃うため、モデルの学習におけるバイアスを防ぎます。
3.2.3 カテゴリカルデータの処理
データセットに数値データだけでなく、カテゴリカルデータ(カテゴリ値)が含まれている場合、それらを数値データに変換する必要があります。カテゴリカルデータを処理する方法としては、次のような方法があります。
- ラベルエンコーディング: 各カテゴリに固有の整数値を割り当てる。
- ワンホットエンコーディング: カテゴリを0と1のバイナリ値で表現する。
Pandasのget_dummies
メソッドを使うと、簡単にワンホットエンコーディングができます。
# ワンホットエンコーディング
df_encoded = pd.get_dummies(df, columns=['カテゴリ列'])
ワンホットエンコーディングを行うことで、モデルはカテゴリカルデータを数値として扱えるようになります。
3.3 データの可視化と分析
データの準備が整ったら、次に行うべきはデータの可視化です。データの可視化は、データの分布や相関関係、異常値(アウトライアー)などを直感的に理解するための強力な手段です。Pythonには、MatplotlibやSeabornなどの強力な可視化ライブラリがあり、これらを使ってデータをグラフィカルに表現できます。
3.3.1 データの分布の可視化
データの分布を理解するためには、ヒストグラムやボックスプロットなどが有効です。まず、各特徴量の分布を確認して、異常な値や偏りがないかを調べます。
import matplotlib.pyplot as plt
# ヒストグラムを作成
df.hist(bins=20, figsize=(10,10))
plt.show()
ヒストグラムは、データの値の範囲をいくつかのビン(区間)に分けて、その区間に含まれるデータの数を表示するグラフです。これにより、特徴量がどのように分布しているかを視覚的に確認できます。
3.3.2 相関関係の可視化
次に、特徴量同士の相関関係を確認します。特に線形回帰などのモデルでは、特徴量間の相関関係が強いと、多重共線性の問題が生じる可能性があります。相関行列とヒートマップを使って、データの相関を視覚化します。
import seaborn as sns
# 相関行列の計算
corr_matrix = df.corr()
# ヒートマップの作成
plt.figure(figsize=(10,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
このヒートマップでは、特徴量間の相関係数が視覚的に表現されており、どの特徴量が強い相関を持っているかを一目で確認できます。
3.3.3 外れ値の検出
外れ値(アウトライアー)は、データセット内の他のデータ点から大きく外れた値を指し、モデルの学習に悪影響を及ぼす可能性があります。ボックスプロットを使って、外れ値を視覚化して検出することができます。
# ボックスプロットの作成
plt.figure(figsize=(10,6))
sns.boxplot(data=df)
plt.show()
ボックスプロットでは、データの四分位範囲を基に外れ値が表示されます。通常、ヒゲの範囲外にあるデータ点が外れ値としてマークされます。外れ値が検出された場合、それを削除するか、適切に処理する必要があります。
初心者におすすめ!プログラミングスクールのススメ
未経験でも気軽に!サブスク型プログラミングスクール【Freeks】
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学の挫折率、驚きの87.5%!
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
有料と無料、スクールの違いは?
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
- 受講条件が異なる
- 学べるスキルやカリキュラム内容が異なる
- 就職や転職のサポート内容が異なる
どちらが自分に合っているか、よく考えて選ぶのが大事です。
サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
- 未経験者向けのわかりやすいカリキュラム
- 経験豊富なエンジニアのサポート
- オンラインで自分のペースで学習可能
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
終了後は副業もサポート!
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓