IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 日常学习记录——skope-rules -> 正文阅读

[人工智能]日常学习记录——skope-rules

1 skope-rules

偶然发现的好东西:Skope-rules是一个基于逻辑规则的Python机器学习模块,官网介绍:skope-rules

根据第一个网址鸢尾花实例修改的西瓜数据集实例:

from sklearn.utils import Bunch
from skrules import SkopeRules
from openpyxl import load_workbook
import numpy as np

# 读取数据集
def readDataSet():
    FeatureNames = []
    FeatureList = []
    LabelList = []

    wb = load_workbook('E:\My Word\study\RL0504\西瓜.xlsx')
    sheet1 = wb.worksheets[4]  # 获取第4张sheet 模糊化以后的数据集

    # 迭代读取所有的行
    cnt = 0
    for row in sheet1.rows:
        row_val = [col.value for col in row]
        if cnt == 0:
            FeatureNames = row_val[0:len(row_val) - 1]
        else:
            FeatureList.append(row_val[0:len(row_val) - 1])
            LabelList.append(row_val[-1])
        cnt = cnt + 1

    print(FeatureNames)
    print(FeatureList)
    print(LabelList)

    return Bunch(
        data=FeatureList,
        target=LabelList,
        feature_names=FeatureNames,
    )


def main():
    watermelon = readDataSet()  # 读取模糊化数据集

    target_names = ['好瓜', '坏瓜']
    feature_names = watermelon.feature_names
    clf = SkopeRules(max_depth_duplication=2,
                     n_estimators=30,
                     precision_min=0.3,
                     recall_min=0.1,
                     feature_names=feature_names)

    for idx, species in enumerate(target_names):
        X, y = watermelon.data, np.array(watermelon.target)
        clf.fit(X, y == idx)
        rules = clf.rules_[0:3]
        print("Rules for watermenlon", species)
        for rule in rules:
            print(rule)
        print()
        print(20 * '=')
        print()


if __name__ == "__main__":
    main()

运行结果:
rules运行结果
感觉可以借助规则学习的一些算法帮助我找到模糊决策的一些根本规则。

2 修改代码时遇到的问题

  1. 列向量转换为行向量:np.array(watermelon.target),或者说是列表与数组之间的转换。
  2. 判断列表或者数组中的元素种类set()函数的使用:list(set(LabelList))。

3 多标签数据集信息熵计算

想要分析一些多标签的数据集,发现自己不会算多标签的数据集的信息熵和信息增益。参照的是这篇博客:决策树中的信息熵+鸢尾花数据集举例
实现代码:

# 计算数据集的信息熵
def cal_entD(target, target_names):
    sumD = len(target)
    entD = 0
    for i in range(len(target_names)):
        sumi = target.count(target_names[i])
        pi = sumi / sumD
        entD = entD - pi * math.log2(pi)
    #     print(sumi, sumD, pi)
    # print(entD)
    return entD
    
# 计算单列属性的信息熵,如计算C1_L时的信息熵
def cal_Ak(data, target, target_names, index):
    sumAk = 0
    sumTarget = [0, 0, 0, 0, 0, 0, 0]
    for i in range(len(data)):
        if data[i][index] != 0:
            sumAk = sumAk + data[i][index]
            if target[i] == 0:
                sumTarget[0] = sumTarget[0] + 1 * data[i][index]
            elif target[i] == 1:
                sumTarget[1] = sumTarget[1] + 1 * data[i][index]
            elif target[i] == 2:
                sumTarget[2] = sumTarget[2] + 1 * data[i][index]
            elif target[i] == 3:
                sumTarget[3] = sumTarget[3] + 1 * data[i][index]
            elif target[i] == 4:
                sumTarget[4] = sumTarget[4] + 1 * data[i][index]
            elif target[i] == 5:
                sumTarget[5] = sumTarget[5] + 1 * data[i][index]
            elif target[i] == 6:
                sumTarget[6] = sumTarget[6] + 1 * data[i][index]
    # print(sumAk)
    # print(sumTarget)
    entAk = 0
    for i in range(len(target_names)):
        if sumTarget[i] != 0:
            entAk = entAk - (sumTarget[i] / sumAk) * math.log2(sumTarget[i] / sumAk)
            # print(i, entAk)

    entDV_D = sumAk / len(target) * entAk
    print(sumAk, len(data), entAk, entDV_D)
    return Bunch(
        sumAk=sumAk,
        entAk=entAk,
        entDV_D=entDV_D
    )

计算属性子集的信息增益时,感觉还是不太熟练,所以代码的可迁移性不强,进行代码迁移时需要结合数据集特点进行修改。

今日总结

1、今天发现了skope-rules逻辑规则模块,算是一件值得高兴的事情,有了这些参照我就可以根据严谨的算法流程对一些分类规则进行总结和推导。但是对于算法的流程还不太理解,所以生成的结果又是过于理想化了,不能直接使用。

2、其次的话,能看懂西瓜书上的一些数学公式了,是一个很大的进步。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:11:01  更:2022-05-07 11:13:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:37:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码