首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《人工智能导论》第 7 章 专家系统与机器学习

《人工智能导论》第 7 章 专家系统与机器学习

作者头像
啊阿狸不会拉杆
发布2026-01-21 12:24:46
发布2026-01-21 12:24:46
1580
举报

7.1 专家系统的产生和发展

        专家系统是人工智能领域中最活跃和最有成效的一个分支,其发展历程可以追溯到 20 世纪 60 年代。1965 年,斯坦福大学的费根鲍姆教授开发了世界上第一个专家系统 DENDRAL,用于分析有机化合物的分子结构。此后,专家系统在医疗、地质、工程等多个领域得到了广泛应用和发展。

专家系统的发展大致经历了以下几个阶段:

  • 初创期(1965-1971 年):第一个专家系统 DENDRAL 诞生
  • 成熟期(1972-1977 年):MYCIN、PROSPECTOR 等著名专家系统出现
  • 发展期(1978 年至今):专家系统技术不断完善,应用领域不断扩大

7.2 专家系统的概念

专家系统的定义

        专家系统是一种具有专门知识和经验的计算机智能程序系统,它能运用领域专家多年积累的经验和专门知识,模拟领域专家的思维过程,解决该领域中需要专家才能解决的复杂问题。

专家系统的特点
  • 启发性:不仅能使用逻辑性知识,还能使用启发性知识
  • 透明性:能向用户解释其推理过程
  • 灵活性:能不断增加新的知识,修改原有知识
  • 高性能:在其专业领域内具有专家水平的解题能力
专家系统的类型

类型

特点

应用领域

解释型

对数据进行分析,给出解释

地质勘探、图像分析

诊断型

找出问题所在并提出解决方案

医疗诊断、设备故障诊断

设计型

根据要求设计满足需要的系统

工程设计、电路设计

规划型

制定行动计划

机器人规划、交通调度

控制型

对系统进行控制

工业控制、生产过程控制

专家系统的应用

专家系统已广泛应用于医疗、金融、工业、农业、教育等多个领域。例如:

  • 医疗诊断专家系统 MYCIN,用于感染性疾病诊断和治疗
  • 地质勘探专家系统 PROSPECTOR,用于寻找矿藏
  • 金融投资专家系统,用于股票投资决策
专家系统概念思维导图

图 1:专家系统概念思维导图

7.3 专家系统的工作原理

专家系统的一般结构

专家系统的一般结构主要包括以下几个部分:

  • 知识库
  • 推理机
  • 综合数据库
  • 知识获取机构
  • 人机接口
  • 解释机构
知识库

        知识库是专家系统的核心组成部分,用于存储领域专家的专业知识。知识可以表示为规则、框架、语义网络等形式。

推理机

        推理机是专家系统的 "思维" 机构,是构成专家系统的核心部分。它的功能是模拟领域专家的思维过程,控制并执行对问题的求解。

综合数据库

        综合数据库又称动态数据库或工作存储器,用于存储问题的初始数据、中间结果和最终结果等。

知识获取机构

        知识获取机构是专家系统中负责知识获取的部分,它的主要功能是接受来自专家的知识,并将其转化为知识库中的知识表示形式。

人机接口

        人机接口是专家系统与用户之间进行交互的界面,它负责将用户的输入信息转换为系统可以处理的形式,同时将系统的输出信息转换为用户可以理解的形式。

解释机构

        解释机构负责回答用户关于系统的问题,解释系统的推理过程,使用户能够理解系统的行为。

专家系统工作原理流程图

图 2:专家系统工作原理流程图

专家系统简单实现示例

下面是一个简单的专家系统示例,用于诊断宠物的健康问题:

代码语言:javascript
复制
class ExpertSystem:
    def __init__(self):
        # 知识库:使用字典存储规则,键为症状,值为可能的疾病
        self.knowledge_base = {
            "咳嗽": ["感冒", "支气管炎"],
            "打喷嚏": ["感冒", "过敏"],
            "食欲不振": ["消化不良", "肠胃炎"],
            "发热": ["感染", "炎症"],
            "呼吸困难": ["肺炎", "哮喘"],
            "腹泻": ["肠胃炎", "食物中毒"]
        }
        # 综合数据库:存储用户输入的症状和推理结果
        self.database = {
            "symptoms": [],
            "diagnosis": []
        }
    
    def get_user_input(self):
        """获取用户输入的症状"""
        print("请输入宠物的症状(输入'结束'完成输入):")
        while True:
            symptom = input("症状: ")
            if symptom == "结束":
                break
            self.database["symptoms"].append(symptom)
            print(f"已记录症状: {symptom}")
    
    def infer(self):
        """推理机:根据症状推断可能的疾病"""
        if not self.database["symptoms"]:
            print("没有输入症状,无法进行诊断")
            return
        
        print("\n正在分析症状...")
        possible_diseases = set()
        
        # 遍历知识库,查找与症状匹配的疾病
        for symptom in self.database["symptoms"]:
            if symptom in self.knowledge_base:
                possible_diseases.update(self.knowledge_base[symptom])
        
        if possible_diseases:
            self.database["diagnosis"] = list(possible_diseases)
            print(f"可能的疾病: {', '.join(self.database['diagnosis'])}")
        else:
            print("根据现有知识,无法确定可能的疾病")
    
    def explain(self):
        """解释机构:解释推理过程"""
        if not self.database["diagnosis"]:
            return
        
        print("\n诊断依据:")
        for disease in self.database["diagnosis"]:
            matching_symptoms = []
            for symptom in self.database["symptoms"]:
                if symptom in self.knowledge_base and disease in self.knowledge_base[symptom]:
                    matching_symptoms.append(symptom)
            
            if matching_symptoms:
                print(f"{disease}: 与症状 {', '.join(matching_symptoms)} 相关")
    
    def run(self):
        """运行专家系统"""
        print("宠物健康诊断专家系统")
        print("=" * 30)
        
        self.get_user_input()
        self.infer()
        self.explain()
        
        print("\n=" * 30)
        print("诊断结束")


# 运行专家系统
if __name__ == "__main__":
    es = ExpertSystem()
    es.run()

        上面的代码实现了一个简单的专家系统,包含了知识库、推理机、综合数据库和解释机构等核心组件。用户可以输入宠物的症状,系统会根据知识库中的规则进行推理,给出可能的疾病诊断,并解释诊断依据。

7.4 知识获取的主要过程与模式

知识获取的过程

知识获取是专家系统开发中的关键环节,其主要过程包括:

  1. 知识识别:确定需要获取的知识范围和类型
  2. 知识收集:从专家、文献等来源收集知识
  3. 知识整理:对收集的知识进行整理和分类
  4. 知识表示:将知识转换为计算机可处理的形式
  5. 知识验证:验证知识的正确性和一致性
  6. 知识入库:将验证后的知识存入知识库
知识获取的模式

知识获取的模式主要有以下几种:

  • 人工获取:知识工程师与领域专家交流,手工获取知识
  • 半自动获取:利用知识获取工具辅助知识工程师获取知识
  • 自动获取:系统自动从数据或实例中获取知识
    • 机器学习
    • 数据挖掘
    • 自然语言处理

7.5 机器学习

机器学习的基本概念

        机器学习是人工智能的核心领域之一,它研究如何让计算机从数据中学习规律,并利用这些规律进行预测或决策。机器学习的目标是使计算机具有像人类一样的学习能力,能够从经验中不断改进性能。

机器学习的分类

机器学习可以按照不同的标准进行分类,常见的分类方式包括:

  • 监督学习
  • 无监督学习
  • 弱监督学习
  • 半监督学习
  • 强化学习
监督学习、无监督学习、弱监督学习
监督学习

        监督学习是指利用有标签的数据进行学习,学习的目标是建立输入到输出的映射关系。常见的监督学习算法包括:

  • 线性回归
  • 逻辑回归
  • 决策树
  • 支持向量机
  • 神经网络
无监督学习

        无监督学习是指利用无标签的数据进行学习,学习的目标是发现数据中的内在结构和模式。常见的无监督学习算法包括:

  • 聚类算法(K-means、层次聚类)
  • 降维算法(PCA、t-SNE)
  • 关联规则学习
弱监督学习

        弱监督学习是介于监督学习和无监督学习之间的一种学习方式,它使用的是弱标签数据,如不完整标签、不准确标签或间接标签。常见的弱监督学习方法包括:

  • 远程监督
  • 多示例学习
  • 多标签学习
  • 半监督学习
机械式学习

        机械式学习是最简单的机器学习方式,它直接记忆训练数据,在需要时直接检索记忆的内容。例如,查表法就是一种典型的机械式学习。

指导式学习

        指导式学习是指从专家或其他信息源获取指导信息,并将其转换为可执行的知识。这种学习方式需要人类专家的指导,但不需要大量的训练数据。

示例学习

        示例学习是指从具体的示例中学习一般规律。它是机器学习中最常见的学习方式之一,监督学习中的大多数算法都属于示例学习。

深度学习

        深度学习是机器学习的一个分支,它使用多层神经网络来学习数据的抽象表示。深度学习在图像识别、语音识别、自然语言处理等领域取得了显著的成果。

机器学习分类思维导图

图 3:机器学习分类思维导图

机器学习算法示例

下面是几个常见机器学习算法的 Python 实现示例:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1. 监督学习:逻辑回归示例
def logistic_regression_example():
    """逻辑回归分类示例"""
    print("=== 逻辑回归分类示例 ===")
    # 生成简单的二维分类数据
    np.random.seed(42)
    X = np.random.randn(100, 2)
    y = (X[:, 0] + X[:, 1] > 0).astype(int)

    # 创建并训练逻辑回归模型
    model = LogisticRegression()
    model.fit(X, y)

    # 预测并计算准确率
    y_pred = model.predict(X)
    accuracy = accuracy_score(y, y_pred)
    print(f"模型准确率: {accuracy:.4f}")

    # 可视化分类结果
    plt.figure(figsize=(8, 6))
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', edgecolors='k')

    # 绘制决策边界
    h = 0.02
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')

    plt.xlabel('特征1')
    plt.ylabel('特征2')
    plt.title('逻辑回归分类结果')
    plt.savefig('logistic_regression.png')
    plt.close()


# 2. 无监督学习:K-means聚类示例
def kmeans_clustering_example():
    """K-means聚类示例"""
    print("=== K-means聚类示例 ===")
    # 生成聚类数据
    np.random.seed(42)
    X = np.vstack([
        np.random.randn(50, 2) + np.array([2, 2]),
        np.random.randn(50, 2) + np.array([-2, -2]),
        np.random.randn(50, 2) + np.array([2, -2])
    ])

    # 创建并训练K-means模型
    kmeans = KMeans(n_clusters=3, random_state=42)
    kmeans.fit(X)
    labels = kmeans.predict(X)
    centroids = kmeans.cluster_centers_

    # 可视化聚类结果
    plt.figure(figsize=(8, 6))
    plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', edgecolors='k')
    plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200)

    plt.xlabel('特征1')
    plt.ylabel('特征2')
    plt.title('K-means聚类结果')
    plt.savefig('kmeans_clustering.png')
    plt.close()


# 3. 无监督学习:PCA降维示例
def pca_example():
    """PCA降维示例"""
    print("=== PCA降维示例 ===")
    # 生成高维数据
    np.random.seed(42)
    X = np.random.randn(100, 10)

    # 创建并应用PCA
    pca = PCA(n_components=2)  # 降维到2维
    X_reduced = pca.fit_transform(X)

    # 输出方差解释率
    explained_variance = pca.explained_variance_ratio_
    total_variance = sum(explained_variance)
    print(f"各主成分方差解释率: {explained_variance}")
    print(f"总方差解释率: {total_variance:.4f}")

    # 可视化降维结果
    plt.figure(figsize=(8, 6))
    plt.scatter(X_reduced[:, 0], X_reduced[:, 1])

    plt.xlabel('主成分1')
    plt.ylabel('主成分2')
    plt.title('PCA降维结果')
    plt.savefig('pca_reduction.png')
    plt.close()


# 4. 监督学习:决策树示例
def decision_tree_example():
    """决策树分类示例"""
    print("=== 决策树分类示例 ===")
    # 生成简单的二维分类数据
    np.random.seed(42)
    X = np.random.randn(100, 2)
    y = (X[:, 0] ** 2 + X[:, 1] ** 2 > 1).astype(int)

    # 创建并训练决策树模型
    model = DecisionTreeClassifier(max_depth=3)
    model.fit(X, y)

    # 预测并计算准确率
    y_pred = model.predict(X)
    accuracy = accuracy_score(y, y_pred)
    print(f"模型准确率: {accuracy:.4f}")

    # 可视化分类结果
    plt.figure(figsize=(8, 6))
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', edgecolors='k')

    # 绘制决策边界
    h = 0.02
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')

    plt.xlabel('特征1')
    plt.ylabel('特征2')
    plt.title('决策树分类结果')
    plt.savefig('decision_tree.png')
    plt.close()


# 运行示例
if __name__ == "__main__":
    logistic_regression_example()
    kmeans_clustering_example()
    pca_example()
    decision_tree_example()
    print("所有示例运行完毕,结果图片已保存")

        上面的代码示例展示了监督学习中的逻辑回归和决策树算法,以及无监督学习中的 K-means 聚类和 PCA 降维算法。每个算法都有完整的实现过程和可视化结果,帮助读者理解机器学习算法的工作原理和应用场景。

7.6 知识发现与数据挖掘

知识发现与数据挖掘的概念

        知识发现 (Knowledge Discovery in Databases, KDD) 是从大量数据中提取有用知识的整个过程。数据挖掘 (Data Mining) 是知识发现过程中的一个关键步骤,它是指从数据中提取有趣的模式和知识的算法过程。

知识发现的一般过程

知识发现的一般过程包括以下几个步骤:

  1. 数据准备:收集、清洗和预处理数据
  2. 数据选择:选择与任务相关的数据
  3. 数据预处理:对数据进行规范化、集成等处理
  4. 数据缩减:减少数据量,保留关键信息
  5. 数据挖掘:应用数据挖掘算法提取模式
  6. 模式评估:评估挖掘出的模式的有效性和实用性
  7. 知识表示:将发现的知识以适当的形式表示出来
知识发现的任务

        知识发现的主要任务包括:

  • 分类:将数据对象划分到不同的类别
  • 聚类:将相似的数据对象归为一组
  • 关联规则挖掘:发现数据项之间的关联关系
  • 时序模式挖掘:发现数据随时间变化的模式
  • 异常检测:发现不符合常规模式的数据对象
  • 趋势分析:预测数据的发展趋势
知识发现的方法

        知识发现的方法主要包括:

  • 统计方法
  • 机器学习方法
  • 神经网络方法
  • 可视化方法
  • 数据库方法
知识发现的对象

        知识发现的对象可以是各种类型的数据,包括:

  • 关系数据库
  • 数据仓库
  • 文本数据
  • 多媒体数据
  • 网络数据
  • 时序数据
知识发现过程流程图

图 4:知识发现过程流程图

知识发现与数据挖掘示例

下面是一个简单的关联规则挖掘示例,使用 Apriori 算法发现购物篮数据中的关联规则:

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt
from mlxtend.frequent_patterns import apriori, association_rules

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def association_rule_mining_example():
    """关联规则挖掘示例"""
    print("=== 关联规则挖掘示例 ===")
    # 创建示例购物篮数据
    # 每一行表示一个购物篮,列表示商品是否被购买(1表示购买,0表示未购买)
    data = {
        '面包': [1, 1, 0, 1, 0],
        '牛奶': [1, 0, 1, 1, 1],
        '鸡蛋': [0, 1, 1, 0, 1],
        '黄油': [1, 0, 0, 1, 0],
        '奶酪': [0, 1, 1, 0, 1],
        '水果': [1, 1, 1, 0, 1]
    }
    df = pd.DataFrame(data)

    print("购物篮数据:")
    print(df)

    # 使用Apriori算法发现频繁项集
    frequent_itemsets = apriori(df, min_support=0.4, use_colnames=True)
    frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x: len(x))

    print("\n频繁项集:")
    print(frequent_itemsets)

    # 生成关联规则
    rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)

    print("\n关联规则:")
    print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])

    # 可视化强关联规则
    plt.figure(figsize=(10, 6))
    plt.scatter(rules['support'], rules['confidence'], alpha=0.5)
    plt.xlabel('支持度')
    plt.ylabel('置信度')
    plt.title('关联规则 - 支持度 vs 置信度')

    # 为强规则添加标签
    for i, rule in rules.iterrows():
        if rule['lift'] > 1.5:  # 只标记提升度高的规则
            plt.annotate(f"({', '.join(rule['antecedents'])}) -> ({', '.join(rule['consequents'])})",
                         (rule['support'], rule['confidence']),
                         fontsize=9)

    plt.grid(True)
    plt.savefig('association_rules.png')
    plt.close()


# 运行示例
if __name__ == "__main__":
    association_rule_mining_example()
    print("关联规则挖掘示例运行完毕,结果图片已保存")

        上面的代码示例使用 Apriori 算法进行关联规则挖掘,这是知识发现中的一项重要任务。示例中创建了一个简单的购物篮数据集,然后使用 Apriori 算法发现频繁项集,并生成关联规则。最后,通过可视化方式展示了支持度和置信度之间的关系,并标记了提升度较高的强规则。

7.7 专家系统的建立

建立一个专家系统通常需要经过以下步骤:

  1. 需求分析:确定专家系统的应用领域和具体任务
  2. 知识获取:从领域专家获取专业知识
  3. 知识表示:选择合适的知识表示方法
  4. 系统设计:设计专家系统的整体结构
  5. 系统实现:编写代码实现专家系统
  6. 系统测试:测试专家系统的性能和准确性
  7. 系统优化:根据测试结果优化系统
  8. 系统维护:持续维护和更新专家系统

7.8 专家系统实例及其骨架系统

骨架系统的概念

        骨架系统是从已有的专家系统中抽取其具体领域知识,保留其体系结构和功能,再加以抽象和通用化而得到的通用专家系统外壳。使用骨架系统可以快速开发新的专家系统,只需添加新的领域知识即可。

EMYCIN 骨架系统

        EMYCIN (Empty MYCIN) 是从医疗诊断专家系统 MYCIN 中抽取出来的骨架系统。它保留了 MYCIN 的推理机制和解释功能,去掉了具体的医疗诊断知识。EMYCIN 可用于开发其他领域的诊断型专家系统。

KAS 骨架系统

        KAS (Knowledge Acquisition System) 是从地质勘探专家系统 PROSPECTOR 中抽取出来的骨架系统。它采用语义网络作为知识表示方法,适用于开发解释型专家系统

7.9 专家系统开发环境

专家系统开发环境是用于辅助专家系统开发的软件工具,它通常包括:

  • 知识表示工具
  • 推理机工具
  • 知识获取工具
  • 人机接口工具
  • 解释工具
  • 调试工具

常见的专家系统开发环境包括:

  • CLIPS (C Language Integrated Production System)
  • Jess (Java Expert System Shell)
  • Python 中的专家系统库(如 PyKE、Prolog for Python)
  • 商业专家系统开发工具(如 G2、ART)

7.10 小结

本章介绍了专家系统与机器学习的基本概念和原理,主要内容包括:

  1. 专家系统的产生和发展历程
  2. 专家系统的定义、特点、类型和应用
  3. 专家系统的工作原理和基本结构
  4. 知识获取的过程和模式
  5. 机器学习的基本概念和分类
  6. 监督学习、无监督学习等主要学习方法
  7. 知识发现与数据挖掘的概念和过程
  8. 专家系统的建立过程和实例

        专家系统和机器学习是人工智能领域的重要分支,两者相互关联、相互促进。专家系统侧重于利用领域专家的知识进行推理,而机器学习则侧重于从数据中自动学习规律。随着人工智能技术的不断发展,专家系统和机器学习的结合将成为未来的重要发展方向。

        通过本章的学习,读者应该对专家系统和机器学习有了基本的了解,并能够通过示例代码动手实践,加深对理论知识的理解和应用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7.1 专家系统的产生和发展
  • 7.2 专家系统的概念
    • 专家系统的定义
    • 专家系统的特点
    • 专家系统的类型
    • 专家系统的应用
    • 专家系统概念思维导图
  • 7.3 专家系统的工作原理
    • 专家系统的一般结构
    • 知识库
    • 推理机
    • 综合数据库
    • 知识获取机构
    • 人机接口
    • 解释机构
    • 专家系统工作原理流程图
    • 专家系统简单实现示例
  • 7.4 知识获取的主要过程与模式
    • 知识获取的过程
    • 知识获取的模式
  • 7.5 机器学习
    • 机器学习的基本概念
    • 机器学习的分类
    • 监督学习、无监督学习、弱监督学习
      • 监督学习
      • 无监督学习
      • 弱监督学习
    • 机械式学习
    • 指导式学习
    • 示例学习
    • 深度学习
    • 机器学习分类思维导图
    • 机器学习算法示例
  • 7.6 知识发现与数据挖掘
    • 知识发现与数据挖掘的概念
    • 知识发现的一般过程
    • 知识发现的任务
    • 知识发现的方法
    • 知识发现的对象
    • 知识发现过程流程图
    • 知识发现与数据挖掘示例
  • 7.7 专家系统的建立
  • 7.8 专家系统实例及其骨架系统
    • 骨架系统的概念
    • EMYCIN 骨架系统
    • KAS 骨架系统
  • 7.9 专家系统开发环境
  • 7.10 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档