如何将具有不同参数的多个sklearn算法应用于多个数据帧?

Posted

技术标签:

【中文标题】如何将具有不同参数的多个sklearn算法应用于多个数据帧?【英文标题】:how to apply multiple sklearn algorithms with different parameters to multiple data frames? 【发布时间】:2019-07-31 09:18:27 【问题描述】:

我正在寻找一种有效的方法,将多个 sklearn 聚类算法应用于多个数据帧,而无需过多重复。

import pandas as pd
import numpy as np
from sklearn.datasets import make_moons,make_blobs
from sklearn.cluster import KMeans, DBSCAN
from matplotlib import pyplot

X1, y1 = make_moons(n_samples=100, noise=0.1)
X2, y2 = make_blobs(n_samples=100, centers=3, n_features=2)

我想在这些数据集上同时应用 kmeans 和 dbscan,但是每个数据集需要不同的参数,如何使用循环将多个模型应用于多个数据并最终将它们绘制在网格中?谢谢。

【问题讨论】:

【参考方案1】:

您已经创建了一些 dict 来定义每个 dataset|clustering_algo 组合的超参数。

以下方法可能对您有用! [开发自sklearn clustering's documentation]

import pandas as pd
import numpy as np
from sklearn.datasets import make_moons,make_blobs
from sklearn.cluster import KMeans, DBSCAN
from matplotlib import pyplot as plt

noisy_moons = make_moons(n_samples=100, noise=0.1)
blobs = make_blobs(n_samples=100, centers=3 , center_box = (-1,1),cluster_std=0.1)

colors = np.array(['#377eb8', '#ff7f00', '#4daf4a',
                   '#f781bf', '#a65628', '#984ea3',
                   '#999999', '#e41a1c', '#dede00'])

#defining the clustering algo which we want to try
clustering_models = [KMeans,DBSCAN]

from collections import namedtuple
Model = namedtuple('Model', ['name', 'model'])
models = [Model(model.__module__.split('.')[-1][:-1], model) 
          for model in clustering_models]

#defn of params for each dataset|clustering_algo
datasets_w_hyperparams = [(noisy_moons[0], 
                           models[0][0]: 'n_clusters': 2, models[1][0]: 'eps': .3, ),
                          (blobs[0], 
                           models[0][0]: 'n_clusters': 2, models[1][0]: 'eps': .1, )]

f,axes=plt.subplots(len(datasets_w_hyperparams),len(models),figsize = (15,10))
for data_id,(dataset,params) in enumerate(datasets_w_hyperparams):
    for model_id,model in enumerate(models):
        ax = axes[data_id][model_id]
        name, clus_model = model
        pred = clus_model(**params[name]).fit_predict(dataset)
        ax.scatter(dataset[:,0],dataset[:,1], s=20, color= colors[pred])
        ax.set_title(name)
plt.show()

【讨论】:

以上是关于如何将具有不同参数的多个sklearn算法应用于多个数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何将仅关键字参数应用于多处理池中的函数?

您将如何使用 Sklearn 的 VotingClassifier 进行 RandomizedSearchCV?

如何将两个估计器对象传递给 sklearn 的 GridSearchCV,以便它们在每个步骤中具有相同的参数?

随机森林原理与Sklearn参数详解

sklearn 神经网络 MLPClassifier简单应用与参数说明

实验二 K-近邻算法及应用