美文网首页程序员
箱型图实现分割点选取

箱型图实现分割点选取

作者: 对月流珠_0c9f | 来源:发表于2018-11-27 10:57 被阅读12次

    在LOF算法中,对于k值的选取格外重要,它直接影响了最终结果的有效程度。
    在这里采用箱型图实现数据的分层与k值选取。

    源自https://zhuanlan.zhihu.com/p/37753692

    def box(data, legend=True):
        import matplotlib.pyplot as plt
        import pandas as pd
        plt.rcParams['axes.unicode_minus'] = False
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.style.use("ggplot")
        plt.figure()
        # 如果不是DataFrame格式,先进行转化
        if type(data) != pd.core.frame.DataFrame:
            data = pd.DataFrame(data)
        p = data.boxplot(return_type='dict')
        warming = pd.DataFrame()
        y = p['fliers'][0].get_ydata()
        y.sort()
        for i in range(len(y)):
            if legend == True:
                plt.text(1, y[i] - 1, y[i], fontsize=10, color='black', ha='right')
            if y[i] < data.mean()[0]:
                form = '低'
            else:
                form = '高'
            warming = warming.append(pd.Series([y[i], '偏' + form]).T, ignore_index=True)
        print(warming)
        plt.show()
    box(outliers1['local outlier factor'].tolist()+inliers1['local outlier factor'].tolist(), legend=True)
    

    其中outliers1、inliers1是选自LOF算法的代码实现中的训练集计算结果。
    结果:



    可以看到的是选择2.x的k值比较合理,其实选择7.4作为k值也是有道理的,原来在代码中通过不断的尝试我们采用了5。

    相关文章

      网友评论

        本文标题:箱型图实现分割点选取

        本文链接:https://www.haomeiwen.com/subject/mhzwqqtx.html