变量聚类包

varclushi的Python项目详细描述


瓦克鲁希

这是一个python模块,用于执行具有层次结构的变量集群(varclus)。varclus是一种很好的降维算法。这里有一个简短的描述:

  1. 选择要拆分的群集。
  2. 通过查找前两个主分量,执行正交旋转,并将每个变量分配给与之具有更高平方相关性的旋转分量,将所选簇分成两个簇。
  3. 变量被迭代地重新分配到集群,以最大化由群集组件所占的方差。

缩进观众:

  • 那些熟悉varclus算法在其他分析软件(如sas)中的使用,但在试图找到合适的python模块时总是感到苦恼的人。
  • 对varclus算法不熟悉的Python。源代码可以帮助您深入理解该算法背后的数学原理。

见解和亮点:

  • (这是纯粹的理论部分,忽略这一点并不影响这个包的使用)。现有文献总是提到我们需要主成分(参照步骤2-3)。实际上,实现该算法不需要计算主成分,相关矩阵及其特征向量足以得到成分与变量的平方相关(这可以通过数学证明)。如果我们的数据集有数百万个观测值和数百个变量,不使用主成分将节省时间和内存。
  • 如果我们使用sas varclus过程作为基准,python包varclusi可以产生非常相似的结果。这保证代码的正确性。:)

示例

有关详细信息,请参见demo.ipynb

importpandasaspdfromvarclushiimportVarClusHi

创建varclushi对象并将要分析的数据帧(df)作为参数传递,您还可以指定

  • 功能列表(feat_list,默认为df的所有列)
  • 最大第二特征值(maxeigval2,默认值1)
  • 最大群集数(最大群集数,默认为无)

然后调用方法varclus(),它执行分层变量聚类算法

demo1_df=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv',sep=';')demo1_df.drop('quality',axis=1,inplace=True)demo1_vc=VarClusHi(demo1_df,maxeigval2=1,maxclus=None)demo1_vc.varclus()
<varclushi.varclushi.VarClusHi at 0x15f96e35e10>

呼叫信息,您可以获得集群的数量、每个集群中的变量数量(n_vars)、每个集群解释的方差(eigval1)等。

demo1_vc.info
ClusterN_VarsEigval1Eigval2VarProp0032.1413570.6584130.7137861131.7668850.9009910.5889622221.3712600.6287400.6856303321.5524960.4475040.7762484411.0000000.0000001.000000

调用rsquare,可以得到每个变量的(1-rsquare)比率

demo1_vc.rsquare
ClusterVariableRS_OwnRS_NCRS_Ratio00fixedacidity0.8822100.2772560.16297610density0.6220700.2461940.50136220pH0.6370760.1943590.45047831freesulfurdioxide0.7777960.0103580.22453041totalsulfurdioxide0.7866600.0422940.22276151residualsugar0.2024280.0454240.83552562sulphates0.6856300.1060220.35165372chlorides0.6856300.0489030.33053483citricacid0.7762480.3982080.37181093volatileacidity0.7762480.0409200.233299104alcohol1.0000000.0820550.000000

安装

  • 要求:python 3.4+

  • 按PIP安装:

pip install varclushi

其他评论:

  • 控制该算法的参数仅包括第二特征值和最大簇数。我不开发其他功能,因为它足够我使用。如果你需要更多的灵活性,你可以通过xuanjing@hotmail.com来联系我。

  • 一旦我有时间,源代码的注释将被添加。

谢谢

谢谢我的前任经理,我第一次从他那里听说这种方法。感谢我现在的经理李明松先生,他给了我足够的鼓励和支持来完成这个项目。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用运行时从JAVA运行openssl命令?   不使用线程安全类(如AtomicInteger和SynchronizedList)的java ProducerConsumer问题   匹配字符串的java模式   在java中使用泛型接口作为返回类型   java将可能具有序列化JSON值的hashmap作为节点添加到JSON字符串中   Eclipse无法从Java8流推断正确的类型   java无法了解标准JButton的大小   java我能用一个循环优化这个函数吗(在第一种方法中)?   Apache CXF中基于WebSocket的java SOAP?   java想要运行奇偶和求和三步   矩阵上随机元素的java集值   java布尔相等:0==a,操作数顺序重要吗?   java Eclipse不会退出我的插件   java如何在spring的SOAP拦截器中获取HttpServletRequest和HttpServletResponse