《数据挖掘》第四次实验


一、基本内容

链接: 《数据挖掘》第七课笔记


二、code

题目

在这里插入图片描述

1.H矩阵

    def to_H(self):
        '''
        H=np.zeros((self.n,self.n))
        out_list=np.sum(self.start, axis=0)
        for j in range(self.n):
            for i in range(self.n):
                if self.start[i][j] ==1:
                    H[i][j] = 1 / out_list[j]
        '''
        out_list = np.sum(self.start, axis=0)
        H = np.where(out_list == 0, 0, self.start / out_list)
        return H

2.A矩阵

# 求A矩阵
def to_A(self,H):
    A=np.zeros((self.n,self.n))
    a = 1 / n
    for i in range(self.n):
        if np.all(H[:, i] == 0):
            A[:,i]=a
    '''
     return np.where(np.all(H == 0, axis=0), 1 / self.n, 0)
     '''
    return A

3.S矩阵

    S = H+A

4.G矩阵

    def to_G(self,S):
        J=np.ones((self.n,self.n))
        G=self.alpha*S+(1-self.alpha)*(1/self.n)*J
        return G

5.幂法求解特征向量

'''
# 幂法求解主特征向量
def mifa(self,G):
    x = np.ones((n, 1))/n
    for i in range(self.epoch):
        x_temp = np.dot(G, x)

        if np.linalg.norm(x_temp - x) < 1e-8:
            break
        x=x_temp
    return x
'''
# 幂法求解主特征向量
def mifa(self,G):
    x = np.ones((n, 1))
    for i in range(self.epoch):
        x_temp = np.dot(G, x)
        norm = np.linalg.norm(x_temp)#计算2范数,计算向量长度
        if norm != 0:
            x_temp= x_temp / norm
        if np.linalg.norm(x_temp - x) < 1e-8:
            break
        x=x_temp
    return x
'''

6.整体代码

import numpy as np

class important():
    def __init__(self,start,n):
        self.start=start
        self.n=n
        self.alpha=0.85
        self.epoch=10000
        pass

    #求H矩阵
    def to_H(self):
        '''
        H=np.zeros((self.n,self.n))
        out_list=np.sum(self.start, axis=0)
        for j in range(self.n):
            for i in range(self.n):
                if self.start[i][j] ==1:
                    H[i][j] = 1 / out_list[j]
        '''
        out_list = np.sum(self.start, axis=0)
        H = np.where(out_list == 0, 0, self.start / out_list)
        return H

    # 求A矩阵
    def to_A(self,H):
        A=np.zeros((self.n,self.n))
        a = 1 / n
        for i in range(self.n):
            if np.all(H[:, i] == 0):
                A[:,i]=a
        '''
         return np.where(np.all(H == 0, axis=0), 1 / self.n, 0)
         '''
        return A



    #求G矩阵
    def to_G(self,S):
        J=np.ones((self.n,self.n))
        G=self.alpha*S+(1-self.alpha)*(1/self.n)*J
        return G

    # 幂法求解主特征向量
    def mifa(self,G):
        x = np.ones((n, 1))/n
        for i in range(self.epoch):
            x_temp = np.dot(G, x)
            if np.linalg.norm(x_temp - x) < 1e-8:
                break
            x=x_temp
        return x
    '''
    # 幂法求解主特征向量
    def mifa(self,G):
        x = np.ones((n, 1))
        for i in range(self.epoch):
            x_temp = np.dot(G, x)
            norm = np.linalg.norm(x_temp)#计算2范数,计算向量长度
            if norm != 0:
                x_temp= x_temp / norm
            if np.linalg.norm(x_temp - x) < 1e-8:
                break
            x=x_temp
        return x
    '''
if __name__ == '__main__':
    start=[[0,1,1,1,0,0],[0,0,1,1,0,1],[0,0,0,1,0,0],[0,0,1,0,0,1],[0,0,0,0,0,1],[0,1,0,1,0,0]]
    start = np.transpose(start)
    n = len(start)
    important = important(start,n)

    H = important.to_H()
    A = important.to_A(H)
    S = H+A
    G = important.to_G(S)
    I = important.mifa(G)
    print("H Matrix:\n", H)
    print("A Matrix:\n", A)
    print("S Matrix:\n", S)
    print("G Matrix:\n", G)
    print("I stable:\n", I)

7.实验结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻兒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值