Python による機械学習: Scikit-learn の初心者ガイド
1. Scikit-learn の概要
1. Scikit-learn とは何ですか?
Scikit-learn は、Python 言語に基づく機械学習ツール ライブラリであり、分類、回帰、クラスタリングなどの一般的な機械学習タスク用の API に加え、一般的に使用される多くのデータ前処理ツールやデータ視覚化ツールも提供します。Scikit-learn は、NumPy、SciPy、matplotlib ツールと連携するように設計されているため、これらのライブラリとの統合は簡単です。
2. Scikit-learnのメリットと活用シーン
Scikit-learn は、さまざまな機械学習タスク用の、豊富で成熟した使いやすいアルゴリズムとツールを提供します。Scikit-learn は、データの前処理からモデルの選択、トレーニング、評価に至る完全な機械学習ワークフローを可能にします。データマイニング、予測モデリング、マシンビジョン、自然言語処理などの分野でも広く使用されています。
3.Scikit-learnのインストール
次のコマンドで pip コマンドを使用して Scikit-learn をインストールできます。
pip install -U scikit-learn
2. データの準備
1. データの特性
このリンクでは、最初に特定のタスクに従ってデータを探索して記述し、モデルの構築に使用できる特性と標準を決定する必要があります。Pandas ライブラリを使用してデータセットを DataFrame にロードし、head や description などのメソッドを使用してデータの基本的な状況を理解できます。
import pandas as pd
# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')
# 预览数据
print(df.head())
# 描述数据
print(df.describe())
2. データクリーニング
データ クリーニング フェーズでは、不要な列を削除し、欠落データや外れ値などに対処します。Pandas ライブラリの Drop や fillna などのメソッドを使用してデータを処理できます。
import pandas as pd
# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')
# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)
# 处理缺失的数据
df = df.fillna(df.mean())
# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]
3. データのパーティショニング
機械学習タスクでは、通常、データ セットをトレーニング セットとテスト セットに分割する必要があります。データの分割には Scikit-learn ライブラリを使用できます。
from sklearn.model_selection import train_test_split
import pandas as pd
# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')
# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)
# 处理缺失的数据
df = df.fillna(df.mean())
# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('label', axis=1), df['label'], random_state=42)
3. モデルのトレーニング
1. 機種の選定
モデル選択プロセスでは、タスクの性質、データの分布、パフォーマンス要件に応じて最適なモデルを選択する必要があります。Scikit-learn は、一般的に使用される機械学習アルゴリズムを多数提供しており、その中からタスクに適したものを選択できます。
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
clf1 = SVC()
clf2 = KNeighborsClassifier()
clf3 = RandomForestClassifier()
2. モデルのトレーニング
モデルを選択したら、トレーニング データを使用してモデルをトレーニングする必要があります。Scikit-learn は、モデル トレーニング用の Fit メソッドを提供します。
from sklearn.svm import SVC
import pandas as pd
# 导入数据集到 DataFrame
df = pd.read_csv('data.csv')
# 删除无用的列
df = df.drop(['id', 'timestamp'], axis=1)
# 处理缺失的数据
df = df.fillna(df.mean())
# 处理异常值
df = df[(df['value'] >= 0) & (df['value'] <= 100)]
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('label', axis=1), df['label'], random_state=42)
# 初始化 SVM 模型
clf = SVC(kernel='linear', C=1)
# 训练模型
clf.fit(X_train, y_train)
3. モデルの評価
モデル評価部分では、モデルのパフォーマンスを評価するためにテスト セットが必要です。Scikit-learn は、スコア法や混同行列などの評価方法を提供します。
from sklearn.metrics import accuracy_score, confusion_matrix
# 用测试集评估模型的性能
y_pred = clf.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion Matrix:', confusion_matrix(y_test, y_pred))
4. 機械学習アルゴリズム
1. 教師あり学習アルゴリズム
1.1 線形回帰
線形回帰モデルは、線形関係をモデル化するための機械学習アルゴリズムです。売上や株価などの連続数値変数を予測するために使用できます。以下は、scikit-learn ライブラリを使用して線形回帰を実装する例です。
from sklearn.linear_model import LinearRegression
# 建立线性回归模型
model = LinearRegression()
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
1.2 ロジスティック回帰
ロジスティック回帰モデルは、バイナリ分類問題をモデル化するための機械学習アルゴリズムです。これは、イベントが発生する確率を予測するために使用できます。以下は、scikit-learn ライブラリを使用してロジスティック回帰を実装する例です。
from sklearn.linear_model import LogisticRegression
# 建立逻辑回归模型
model = LogisticRegression()
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
1.3 デシジョンツリー
デシジョン ツリーは、ツリー構造に基づいて意思決定を行う機械学習アルゴリズムです。分類問題や回帰問題に使用でき、理解と説明が簡単であることが利点です。以下は、scikit-learn ライブラリを使用して実装されたデシジョン ツリーの例です。
from sklearn.tree import DecisionTreeClassifier
# 建立决策树模型
model = DecisionTreeClassifier(max_depth=2)
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
1.4 サポートベクターマシン
サポート ベクター マシンは、マージンの最大化に基づいて分類するための機械学習アルゴリズムです。分類問題と回帰問題の両方に使用でき、その利点は高精度と堅牢性にあります。以下は、scikit-learn ライブラリを使用して実装されたサポート ベクター マシンの例です。
from sklearn.svm import SVC
# 建立支持向量机模型
model = SVC(kernel='linear')
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
1.5 ランダムフォレスト
ランダム フォレストは、分類と回帰のための決定木に基づく機械学習アルゴリズムです。高次元および大規模なデータセットを処理するために使用できます。以下は、scikit-learn ライブラリを使用したランダム フォレストの実装例です。
from sklearn.ensemble import RandomForestClassifier
# 建立随机森林模型
model = RandomForestClassifier(n_estimators=100)
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
2. 教師なし学習アルゴリズム
2.1 主成分分析
主成分分析は、データの次元削減のための機械学習アルゴリズムです。線形変換を通じて高次元データを低次元データに変換し、変動性のほとんどを保存します。以下は、scikit-learn ライブラリを使用した主成分分析の例です。
from sklearn.decomposition import PCA
# 建立主成分分析模型
model = PCA(n_components=2)
# 将数据转化为低维度
X_pca = model.fit_transform(X)
2.2 クラスター分析
クラスター分析は、データセットをグループ化するために使用される機械学習アルゴリズムです。これを使用して、データセット内のさまざまなパターンやグループを発見できます。以下は、scikit-learn ライブラリを使用したクラスター分析の例です。
from sklearn.cluster import KMeans
# 建立聚类分析模型
model = KMeans(n_clusters=3)
# 训练模型
model.fit(X)
# 预测结果
y_pred = model.predict(X)
5. 実践事例
1. 分類の問題
デシジョン ツリー アルゴリズムを使用したアイリス分類問題の例:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 导入鸢尾花数据集
iris = load_iris()
# 建立决策树分类模型
model = DecisionTreeClassifier()
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
# 计算准确率
print('Accuracy:', accuracy_score(y_test, y_pred))
2. 回帰問題
ランダム フォレスト アルゴリズムを使用したボストンの住宅価格回帰問題の例:
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
# 导入波士顿房价数据集
boston = load_boston()
# 建立随机森林回归模型
model = RandomForestRegressor()
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=0)
# 训练模型
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict(X_test)
# 计算平均绝对误差
print('MAE:', mean_absolute_error(y_test, y_pred))
6. 高度な Scikit-Learn
1. 組立ライン
処理する必要があるデータが非常に大きい場合は、データをインポートして、さまざまなモデルを選択してトレーニングするのが簡単です。これらのプロセスでは、標準偏差の正規化や正規化など、データの前処理が必要になる場合があります。Scikit-learn は、プロセス全体をコードと統合して簡単に呼び出すことができるパイプライン API を提供します。
パイプラインの例を次に示します。
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
# 导入鸢尾花数据集
iris = load_iris()
# 建立Pipeline
pipeline = Pipeline([
('reduce_dim', PCA()),
('classify', LogisticRegression())
])
# 建立参数搜索空间
param_grid = {
'reduce_dim__n_components': [2, 4, 8],
'classify__C': [0.1, 1, 10]
}
# 在流水线中使用GridSearchCV调整参数
grid = GridSearchCV(pipeline, cv=5, n_jobs=-1, param_grid=param_grid)
grid.fit(iris.data, iris.target)
# 输出最佳参数
print(grid.best_params_)
2. モデルのチューニング
Scikit-learn でモデルを使用する場合、最高のパフォーマンスを得るためにモデルのハイパーパラメータを適切に調整する必要があります。Scikit-learn では、グリッド検索やランダム検索など、さまざまな調整方法が提供されています。どの方法を使用するかは、データのサイズと要件によって異なります。
以下は、グリッド検索を使用してモデルを調整する例です。
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error
# 导入波士顿房价数据集
boston = load_boston()
# 建立随机森林回归模型
model = RandomForestRegressor()
# 建立参数搜索空间
param_grid = {
'n_estimators': [10, 50, 100],
'max_depth': [None, 2, 5]
}
# 在模型中使用GridSearchCV调整参数
grid = GridSearchCV(model, cv=5, n_jobs=-1, param_grid=param_grid)
grid.fit(boston.data, boston.target)
# 预测结果
y_pred = grid.predict(boston.data)
# 计算平均绝对误差
print('MAE:', mean_absolute_error(boston.target, y_pred))
3. 機能の選択
実際のアプリケーションでは、すべての機能が同じように重要であるわけではありません。一部の機能は他の機能よりも予測性が高い場合があります。特徴選択は、最も重要な特徴を選択するために使用される手法です。Scikit-learn は、SelectKBest、Recursive Feature Elimination、SelectFromModel など、多くの特徴選択ツールを提供します。
以下は、SelectKBest を使用して機能を選択する例です。
from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
# 导入波士顿房价数据集
boston = load_boston()
# 选择最重要的5个特征
selector = SelectKBest(f_regression, k=5)
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=0)
# 选择特征
X_train_selected = selector.fit_transform(X_train, y_train)
X_test_selected = selector.transform(X_test)
# 建立线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train_selected, y_train)
# 预测结果
y_pred = model.predict(X_test_selected)
# 计算平均绝对误差
print('MAE:', mean_absolute_error(y_test, y_pred))
7. まとめと振り返り
1. Scikit-learnのメリットとデメリット
Scikit-learn には次の利点があります。
- 一般的な機械学習の問題に対応する包括的なツールキットが含まれています。
- ほとんどすべてのアルゴリズムは統合 API を通じて使用できるため、ユーザーはこれらのアルゴリズムをよりよく理解し、使用できるようになります。
- 多くのドキュメントと例があり、Scikit-learn を使いやすくなっています。
- 分散コンピューティングを非常によくサポートしており、大規模なデータセットに簡単に拡張できます。
- Scikit-learn のコードはオープンソースです。
Scikit-learn にはいくつかの欠点もあります。
- Scikit-learn は Python に依存しているため、C++ や Java などの言語よりも効率が低くなります。
- 大規模な深層学習モデルはまだ完全にはサポートされていません。
2. 今後の開発方向性
人工知能に加えて、機械学習やデータサイエンスもさらなる発展を遂げるでしょう。Scikit-learn は、多くの人にとって機械学習を始めるための重要なツールの 1 つであり続けます。将来的には、Scikit-learn ツールキットにさらに多くのアルゴリズムが追加され、大規模で高性能なコンピューティングのサポートが強化されることが期待されます。