代码之家  ›  专栏  ›  技术社区  ›  santoku

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

  •  -1
  • santoku  · 技术社区  · 6 年前

    我正在寻找一个有效的方法,以应用多个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,但是每个数据集需要不同的参数,我如何使用一个循环将多个模型应用于多个数据并最终在网格中绘制出来?谢谢。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Venkatachalam    6 年前

    您已经创建了一些dict来定义每个数据集的超参数| 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()
    

    enter image description here