[データサイエンス] Scikit-learn [Scikit-learn、データの読み込み、トレーニングセットとテストセットのデータ、モデルの作成、モデルのフィッティング、データとモデルのフィッティング、モデルのパフォーマンスの評価、モデルの調整]


1.Scikitラーン

Scikit-LearnオープンソースのPythonライブラリ、統一されたインターフェイスを通じて、機械学習前処理相互検証、視覚化アルゴリズムを実装します。

ここに画像の説明を挿入します

>>> from sklearn import neighbors, datasets, preprocessing
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import accuracy_score
>>> iris = datasets.load_iris()
>>> X, y = iris.data[:, :2], iris.target
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> X_train = scaler.transform(X_train)
>>> X_test = scaler.transform(X_test)
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)
>>> knn.fit(X_train, y_train)
>>> y_pred = knn.predict(X_test)
>>> accuracy_score(y_test, y_pred)

  上記が使用されていますscikit-learn ライブラリk 最近傍 (KNN) 分類プロセスを実行して、虹彩データ セットに対する KNN 分類器の予測精度を取得します。


2. データのロード

  Scikit-Learn処理されるデータは、NumPy 配列または SciPy スパース行列として保存された数値であり、数値配列に変換できる Pandas データ フレームなどの他のデータ型もサポートしています

>>> import numpy as np
# 导入了 NumPy 库,用于进行数值计算和数组操作
>>> X = np.random.random((10,5))
>>> y = np.array(['M','M','F','F','M','F','M','M','F','F','F'])
>>> X[X < 0.7] = 0

  上記では、NumPy ライブラリを使用して10 行 5 列のランダム行列 X を生成し、0.7 未満の要素を 0 に設定しました。同時に、性別ラベルを含む NumPy 配列 y が作成されます(10, 5) の形状のランダム行列 X を取得し、0.7 未満の要素は 0 に設定され、性別ラベルを含む配列 y を作成します。これらのデータは次の目的で使用できます。分析するモデリングまたは他のタスク。


3. トレーニング セットとテスト セットのデータ

scikit-learn ライブラリtrain_test_split 関数は、データ セットを分割するために  使用されます。トレーニングセットそしてテストセット

>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

  分割されたトレーニングセットとテストセットの特徴データX_train、X_testと、対応するカテゴリラベルデータy_train、y_testを取得します。トレーニングセットで実行可能モデルのトレーニング次に、テスト セットを使用してモデルのパフォーマンスと精度を評価します


4. モデルを作成する

4.1 教師あり学習評価者

4.1.1 線形回帰

scikit-learn ライブラリLinearRegression クラス  を使用します線形回帰モデル オブジェクトを作成する

>>> from sklearn.linear_model import LinearRegression
>>> lr = LinearRegression(normalize=True)

  線形回帰モデル オブジェクト lr を作成します


4.1.2 サポート ベクター マシン (SVM)

scikit-learn ライブラリSVC クラスを  使用してサポート ベクター マシン (SVM) モデル オブジェクト

>>> from sklearn.svm import SVC
>>> svc = SVC(kernel='linear')

サポート ベクター マシン モデル オブジェクト svc  を作成し線形カーネル関数を使用した分類


4.1.3 単純ベイズ

scikit-learn ライブラリGaussianNB クラス  を使用して単純ベイズ モデル オブジェクト

>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()

Naive Bayes モデル オブジェクト gnb  を作成しますNaive Bayes モデルは、一般的に使用される確率モデルであり、次のような場合に適しています。分類問題


4.1.4 KNN

scikit-learn ライブラリneighbors モジュールを  使用してK 最近傍 (KNN) 分類子オブジェクト

>>> from sklearn import neighbors
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)

KNN 分類子オブジェクト knn  作成します。最近隣順に並べ替えるKNNは、最近傍ラベルに基づく分類のためのインスタンスベースの学習方法


4.2 教師なし学習評価器

4.2.1 主成分分析 (PCA)

scikit-learn ライブラリPCA クラス  を使用して主成分分析 (PCA) オブジェクト

>>> from sklearn.decomposition import PCA
>>> pca = PCA(n_components=0.95)

次元削減または特徴抽出に使用できるPCAオブジェクト pca  を作成しますPCA は、一般的に使用される次元削減手法です。高次元データを低次元空間にマッピングし、データの主な特性を保持します


4.2.2 K の平均

scikit-learn ライブラリKMeans クラス  を使用するとK-Means クラスタラー オブジェクトを作成する

>>> from sklearn.cluster import KMeans
>>> k_means = KMeans(n_clusters=3, random_state=0)

データ ポイント間の距離に基づいてデータ ポイントをクラスタリングする  K-Means クラスタラー オブジェクト k_means を作成しますK-Means は、一般的に使用されるクラスタリング アルゴリズムです。クラスター内のデータ ポイントが可能な限り類似し、異なるクラスター間のデータ ポイントが大きく異なるように、データ ポイントを事前定義された数のクラスターに分割します。


5. モデルフィッティング

5.1 教師あり学習

  番組トレーニング セットで 3 つの異なる機械学習アルゴリズムをトレーニングするプロセス

# 拟合数据与模型
>>> lr.fit(X, y)
# 使用逻辑回归算法(Logistic Regression)对数据集(X, y)进行拟合。其中,X是输入特征矩阵,y是对应的目标变量向量
>>> knn.fit(X_train, y_train)
# 使用K近邻算法(K-Nearest Neighbors)对训练集(X_train, y_train)进行拟合。其中,X_train是训练集的输入特征矩阵,y_train是对应的目标变量向量
>>> svc.fit(X_train, y_train)
# 使用支持向量机算法(Support Vector Machine)对训练集(X_train, y_train)进行拟合。其中,X_train是训练集的输入特征矩阵,y_train是对应的目标变量向量

5.2 教師なし学習

  トレーニング セットでのクラスタリング特徴の次元削減のプロセスは次のとおりです。

>>> k_means.fit(X_train) # 拟合数据与模型
>>> pca_model = pca.fit_transform(X_train) # 拟合并转换数据

  モデルは、指定されたトレーニング セット データに基づいて K-Means クラスタリング アルゴリズムと PCA アルゴリズムを適合させますK-Means クラスタリング アルゴリズムの場合、モデルは次のようになります。最適なクラスター中心点を見つける方法を学ぶ; PCA アルゴリズムの場合、モデルは次のようになります。最適な主成分投影空間を見つける方法を学ぶこれらのフィッティング操作により、対応するモデルまたは変換オブジェクトが生成され、新しいデータに対する後続のクラスタリングまたは次元削減操作が容易になります。


6. データとモデルのフィッティング

6.1 標準化

以下は、トレーニング セットとテスト セット  のデータ正規化のプロセスです

>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler().fit(X_train)
>>> standardized_X = scaler.transform(X_train)
>>> standardized_X_test = scaler.transform(X_test)

  StandardScaler オブジェクト スケーラーを作成しトレーニング セットのデータを使用して適合させる次に、スケーラーを使用してトレーニング セットとテスト セットを標準化し、データが同じスケールと範囲を持つようにします。モデルのトレーニングと予測の効果を向上させる


6.2 正規化

  次に、トレーニング セットとテスト セットに対してデータ正規化を実行する方法を学習します。

>>> from sklearn.preprocessing import Normalizer
>>> scaler = Normalizer().fit(X_train)
>>> normalized_X = scaler.transform(X_train)
>>> normalized_X_test = scaler.transform(X_test)

  Normalizer オブジェクト スケーラーを作成し、トレーニング セットのデータを使用して適合させます。そうすれば、私たちはできるスケーラーを使用してトレーニング セットとテスト セットを正規化し、データが特徴ベクトルの方向に単位ノルムを持っていることを確認します。正規化により、異なるサンプル間の特徴ベクトルがより比較可能になり、特定の機械学習アルゴリズムのトレーニングと予測の効果に貢献できます。


6.3 二値化

データセットをバイナリ化するプロセスは  次のとおりです

>>> from sklearn.preprocessing import Binarizer
>>> binarizer = Binarizer(threshold=0.0).fit(X)
>>> binary_X = binarizer.transform(X)

  Binarizer オブジェクトのバイナライザーを作成し、しきい値Threshold=0.0 を使用してデータ セット X を 2 値化します。そうすれば、私たちはできるbinarizer を使用したデータセットのバイナリ変換を実行し、結果を変数 binary_X に保存します2 値化により、異なるサンプル間の特徴がより比較可能になり、特定の機械学習アルゴリズムのトレーニングと予測の効果に貢献できます。


6.4 エンコーディング分類機能

LabelEncoder   を使用してターゲット変数をラベル エンコードするプロセス。

>>> from sklearn.preprocessing import LabelEncoder
>>> enc = LabelEncoder()
>>> y = enc.fit_transform(y)

  LabelEncoder オブジェクト enc を作成し、その fit_transform メソッドを使用して、ターゲット変数 y に対してラベル エンコード処理を実行します。エンコードされた結果は元のターゲット変数 y の値を上書きするため、元のラベルは対応する整数エンコーディングに置き換えられますタグのエンコーディングこれは、機械学習タスクのトレーニングと予測のために、数値以外のターゲット変数をモデルが受け入れられる数値形式に変換するためによく使用されます。


6.5 欠損値の入力

  インポーターオブジェクトの使用データセット内の欠損値を埋める

>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values=0, strategy='mean', axis=0)
>>> imp.fit_transform(X_train)

  Imputer オブジェクト imp を作成し、その fit_transform メソッドを使用してトレーニング セット X_train の欠損値を埋めます。埋められた結果は元のトレーニング セット データ X_train を上書きするため、欠損値は対応する列の平均値で置き換えられますImputer クラスは、データセットの完全性と正確性を確保するために、データの前処理段階で欠損値を処理するためによく使用されます。


6.6 多項式特徴の生成

  多項式特徴の使用特徴量の多項式展開

>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly = PolynomialFeatures(5)
>>> poly.fit_transform(X)

  PolynomialFeature オブジェクト ポリゴンを作成し、その fit_transform メソッドを使用してデータセット X を多項式に拡張します。拡張された結果には、元の機能のさまざまなパワーの組み合わせが含まれます1 度の用語から最高次数の 5 の用語まで多項式拡張は、特徴間の非線形関係を捉えるためにモデルの複雑さを増すためによく使用され、それによってモデルの予測力が向上します


7. モデルのパフォーマンスを評価する

7.1 モデルのパフォーマンスを評価する

7.1.1 精度

  scikit-learn のエバリュエーター スコアリング メソッドとメトリック スコアリング関数を使用して、モデルの精度を評価します

>>> knn.score(X_test, y_test)
# 评估器评分法
>>> from sklearn.metrics import accuracy_score
# 指标评分函数
>>> accuracy_score(y_test, y_pred)

エバリュエーター スコアリング メソッドまたはメトリック スコアリング関数を使用して、テスト セット上のモデルの精度を評価でき  ますエバリュエーター スコアリング メソッドはモデル オブジェクトのスコア メソッドを直接呼び出しますが、インジケーター スコアリング関数は精度スコアを計算するために実際のターゲット変数データと予測結果データを渡す必要がありますこれらの評価方法は私たちに役立ちますモデルのパフォーマンスを理解する、そして異なるモデル間のパフォーマンスを比較する


7.1.2 分類予測評価関数

  scikit-learn の使用分類レポート関数分類モデルの精度、再現率、F1 インデックス、サポート率などの評価指標レポートを生成します。

>>> from sklearn.metrics import classification_report
# 精确度、召回率、F1分数及支持率
>>> print(classification_report(y_test, y_pred))

classification_report 関数を使用して、分類モデルの評価メトリック レポートを生成  できますレポートには、適合率再現率F1 インデックス各カテゴリのサポート、加重平均全体の平均などの指標が含まれますこれらのメトリックは、さまざまなカテゴリでモデルのパフォーマンスを評価し、モデルのパフォーマンスに関する詳細情報を提供するのに役立ちます。


7.1.3 混同行列

  scikit-learn のconstruction_matrix関数を使用して、分類モデルの混同行列を生成する

>>> from sklearn.metrics import confusion_matrix
>>> print(confusion_matrix(y_test, y_pred))

  関数conffusion_matrixを使用して、分類モデルの混同行列を生成します。混同行列は、各カテゴリに関するモデルの分類結果を行列の形式で示します実際の例偽陽性偽陰性の例そして真の陰性例量。このようにして、混同行列に基づいてさまざまなカテゴリに対するモデルの分類パフォーマンスを評価し、誤分類の状況をさらに分析できます


7.2 回帰指標

7.2.1 平均絶対誤差

  scikit-learn の means_absolute_error 関数を使用して、回帰モデルの平均絶対誤差(平均絶対誤差) を計算します。

>>> from sklearn.metrics import mean_absolute_error 
>>> y_true = [3, -0.5, 2]
>>> mean_absolute_error(y_true, y_pred)

  回帰モデルの平均絶対誤差を計算するには、mean_absolute_error 関数を使用しますインジケーターモデルの予測と真の値の間の平均偏差を測定します値が小さいほど、モデルの予測の精度が高くなります平均絶対誤差を使用すると、回帰モデルのパフォーマンスを評価し、異なるモデル間のパフォーマンスを比較するのに役立ちます。


7.2.2 平均二乗誤差

  scikit-learn のmeans_squared_error 関数を使用して、回帰モデルの平均二乗誤差( Mean Squared Error )を計算します。

>>> from sklearn.metrics import mean_squared_error
>>> mean_squared_error(y_test, y_pred)

  回帰モデルの平均二乗誤差を計算するには、mean_squared_error 関数を使用します。この指標は、モデルの予測結果と真の値の間の平均差を測定します値が小さいほど、モデルの予測の精度が高くなります平均二乗誤差を使用すると、回帰モデルのパフォーマンスを評価し、異なるモデル間のパフォーマンスを比較するのに役立ちます。


7.2.3 R² スコア

  scikit-learn の r2_score 関数を使用して計算します回帰モデルの R² スコア(R二乗スコア)。

>>> from sklearn.metrics import r2_score
>>> r2_score(y_true, y_pred)

  これらのコードを実行すると、 r2_score 関数を使用して、回帰モデルの確実性または適合度の係数である R² スコアを計算できます。R² スコアの範囲は 0 ~ 1 で、値が 1 に近いほどモデルのデータへの適合度が高いことを示し、値が 0 に近いほどモデルの適合度が低いことを示しますR² スコアは、回帰モデルのパフォーマンスを評価し、他のモデルと比較するのに役立ちます。


7.3 クラスターのメトリック

7.3.1 Rand係数の調整

  scikit-learn の調整済み_rand_score 関数を使用して、クラスタリング アルゴリズムの調整済みランド インデックスを計算します

>>> from sklearn.metrics import adjusted_rand_score
>>> adjusted_rand_score(y_true, y_pred) 

  クラスタリング アルゴリズムの調整済み Rand インデックスを計算するには、adjusted_rand_score 関数を使用します。Rand インデックス値の範囲を -1 ~ 1 の間で調整します。値が 1 に近いほど、クラスタリング結果と実際のラベルの間の整合性が高く、値が 0 に近いほど、クラスタリング結果の整合性はランダムな除算と同じであり、値がより近くなります。を -1 にすると、クラスタリング結果と実際のラベルの間の一貫性が高くなりますRand インデックスを調整すると、クラスタリング アルゴリズムのパフォーマンスを評価し、他のアルゴリズムと比較するのに役立ちます。


7.3.2 均一性

  scikit-learn のhomogeneity_score 関数を使用して、クラスタリング結果の均一性スコア(Homogeneity Score)を計算します。

>>> from sklearn.metrics import homogeneity_score
>>> homogeneity_score(y_true, y_pred) 

  homogeneity_score 関数を使用して、クラスタリング結果の均一性スコアを計算します。均一性スコアの範囲は 0 から 1 です。値が 1 に近いほど、クラスタリング結果内のサンプルが同じカテゴリに属する​​可能性が高くなります。値が 0 に近づくほど、クラスタリング結果はより均一になります。パフォーマンスは低下し、サンプル分布はより分散します。均一性スコアは、均一なサンプルの集中を維持するクラスタリング アルゴリズムのパフォーマンスを評価し、他のアルゴリズムと比較するのに役立ちます。


7.3.3 V メジャー

  scikit-learn のv_measure_score 関数を使用してクラスタリング結果を計算するV小節スコア

>>> from sklearn.metrics import v_measure_score
>>> v_measure_score(y_true, y_pred) 

  v_measure_score 関数を使用して、クラスタリング結果の V メジャー スコアを計算します。V 尺度スコアの範囲は 0 ~ 1 です。値が 1 に近いほど、クラスタリング結果の均一性と完全性が高くなります。値が 0 に近づくほど、クラスタリング結果の品質が低くなります


7.4 相互検証

  scikit-learn のcross_val_score 関数を使用して実行します。相互検証そしてコンピューティングモデルのパフォーマンス評価メトリクス

>>> 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))

  Cross_val_score 関数を使用してモデルを相互検証し、パフォーマンス評価メトリックを計算します。相互検証は、モデルのパフォーマンスをより包括的に評価し、評価指標の信頼性を確保するのに役立ちます相互検証では、入力データがいくつかの分割 (つまり、相互検証の分割数) に分割され、各分割が順番に検証セットとして使用され、残りの分割がトレーニング セットとして使用され、パフォーマンス評価指標をモデル化して計算します最後に、すべてのフォールドのパフォーマンス評価指標を要約して取得します。モデルの平均パフォーマンス評価指標


8. モデルの調整

8.1 グリッド検索

これを行うに  は、scikit-learn のGridSearchCV クラスを使用します。グリッド検索そしてパラメータチューニング

>>> 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)

  このコードを実行すると、GridSearchCV クラスを使用してモデルのパラメーター空間を徹底的に検索し、最適なパラメーターの組み合わせを見つけることができます。グリッド検索は、モデルのパフォーマンスを向上させるための最適なパラメーター設定を見つけるのに役立ちます検索プロセス中に、パラメーターの各セットが相互検証され、パフォーマンス評価メトリックに基づいて最適なパラメーターの組み合わせが選択されます。


8.2 ランダムパラメータの最適化

これを行うには、  scikit-learn のRandomizedSearchCV クラスを使用します。ランダム検索そしてパラメータチューニング

>>> 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_)

  RandomizedSearchCV クラスを使用して、モデルのパラメーター空間をランダムに検索し、最適なパラメーターの組み合わせを見つけます。グリッド検索と比較して、ランダム検索は、広範囲のパラメーター空間で最適なパラメーターの組み合わせをより効率的に見つけることができます検索プロセス中に、パラメーターの各セット相互検証され、パフォーマンス評価メトリックに基づいて最適なパラメーターの組み合わせが選択されます。

おすすめ

転載: blog.csdn.net/m0_65748531/article/details/133465300