机器学习Day03

1. 数学课

        高等数学

                模型优化

        概率论与数理统计

                建模思想

        线性代数

                高性能计算

2. 人工智能项目的本质

        统计学项目

                通过对样本的分析,来评估、估计总体的情况。

3. 概率

        probability或然率,概率,置信度,打分……

        离散型变量

                有限个状态

                状态之间无大小、程度等概念

                状态之间是严格对立的

                概率的计算:

                        转换为频率

                        数个数

        连续性变量

                无限个数值

                数值之间是大小、程度的差异

                内涵是一致的

                概率的计算:

                        高斯分布的概率密度函数(Probability Density Function, PDF)

                        通过对概率密度函数的积分来求解。

                        概率密度函数概率的导数

                        概率就是概率密度函数的积分

                        计算步骤(理论数学):

                                先找出概率密度函数

                                然后再对概率密度函数积分

                                在任何一点的概率都是零

                        计算步骤(工程数学):

                                分析思路:花瓣长度、花瓣宽度、花萼长度、花萼宽度,仔细观察数据,发现都是连续性变量。纯理论数学告诉我们,单点的概率都是0,无法求。而求概率首先需要有概率密度函数,分布决定了概率密度函数,而这个我们根本就不知道是什么分布。所以我们有如下方法来计算。

                                把连续性变量的分布看成是高斯分布。

                                直接拿概率密度函数的值代替概率,这里适合概率用来比较,而不是精准核算的。

import numpy as np  
  
def normal(x, mu=0, sigma=1):  
    """  
    计算正态分布的概率密度函数(PDF)在给定点x的值。  
      
    参数:  
    x : float 或 numpy.ndarray  
        要计算PDF的点或点的数组。  
    mu : float, 可选  
        正态分布的均值,默认为0。  
    sigma : float, 可选  
        正态分布的标准差,默认为1。  
      
    返回:  
    pdf : numpy.ndarray  
        在给定x值处的PDF值。  
    """  
    return 1 / (np.sqrt(2 * np.pi) * sigma) * np.exp(-(x - mu) ** 2 / (2 * sigma ** 2))  
  
# 示例使用  
x = np.linspace(start=-5, stop=5, num=100)  
y = normal(x, mu=0, sigma=1)  
  
# 绘制正态分布(高斯分布)曲线  
import matplotlib.pyplot as plt  
plt.plot(x, y)  
plt.title('Normal Distribution (mu=0, sigma=1)')  
plt.xlabel('x')  
plt.ylabel('Probability Density')  
plt.grid(True)  
plt.show()

决策树(Decision Tree)

        自身就是很好的算法

        解释性比较强

        还能对特征重要性进行排序

        它可大可小,机器学习中唯一一个可以变身的模型

        它是集成学习的基础

        CART:分类和回归树

        训练:构建一颗决策树

        推理:利用决策条件来做推理

"""
1. 导入必要的库和模块
    load_iris函数用于加载鸢尾花(Iris)数据集;
    train_test_split函数用于将数据集分割成训练集和测试集;
    plot_tree函数用于绘制决策树的可视化图形;
    DecisionTreeClassifier类,该类用于实现决策树分类算法。
"""
from sklearn.datasets import load_iris 
from sklearn.model_selection import train_test_split 
from sklearn.tree import plot_tree
from sklearn.tree import DecisionTreeClassifier


"""
2. 加载鸢尾花数据集
    使用load_iris函数加载鸢尾花数据集,
    并通过设置return_X_y=True参数来直接返回特征矩阵X和标签数组y。
    X是一个形状为(150, 4)的数组,包含150个样本的4个特征;
    y是一个长度为150的数组,包含每个样本对应的类别标签。
"""
X,y = load_iris(return_X_y = True)

"""
3. 划分训练集和测试集
    train_test_split函数将数据集划分为训练集和测试集。
    test_size=0.2表示测试集占总数据的20%,
    random_state=0确保每次划分的结果都是相同的,以便结果的可重复性。
    划分后,X_train和y_train分别是训练集的特征和标签,
    X_test和y_test分别是测试集的特征和标签。
"""
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)


"""
4. 创建决策树分类器实例
    创建了一个DecisionTreeClassifier的实例dtc。
    max_depth=2参数限制了树的最大深度为2,这有助于防止过拟合并简化模型。
    criterion="entropy"参数指定了使用信息增益(也称为信息熵)作为划分属性的标准,
    这是构建决策树时选择最佳划分属性的依据之一。
"""
dtc = DecisionTreeClassifier(max_depth=2,criterion="entropy")


"""
5. 训练决策树模型
    使用训练集(X_train和y_train)来训练(拟合)决策树模型。
    fit方法会根据提供的训练数据学习(或拟合)出模型的参数。
"""
dtc.fit(X=X_train,y=y_train)

"""
6. 绘制决策树
使用plot_tree函数绘制训练好的决策树的可视化图形。
"""
plot_tree(dtc)

熵 (entropy)

        香农

        代表系统的混乱程度

        不纯度 impurity

        不确定性

        拿不准

        系统越混乱,熵就越大

        对于分类问题:

                类别越多,每个类别的概率越均等,熵越大

                信息熵

                基尼系数 gini

        对于回归问题:

                数据越集中,熵越小,数据越分散,熵越大

                方差,MSE

        香农观点:

                一个模型,在没有训练时,混乱程度是最高的。

                随着训练的进行,混乱程度逐渐降低。

                


信息熵公式中的 log2,底数是2,真数是0,这违反了对数函数的定义,因为真数不能为0。因此,log2​的值不存在。

 

import numpy as np
p1=np.array([0.5,0.5])
entropy_p1 = 0.5*np.log2(1/0.5)+0.5*np.log2(1/0.5)
entropy_p1

p2=np.array([0.9,0.1])
entropy_p2 = 0.9*np.log2(1/0.9)+ 0.1 * np.log2(1/0.1)
entropy_p2

   

"""
通过枚举遍历寻找最优分裂点
"""
for feature_idx in range(4):
    print(feature_idx) #打印特征索引,输出结果为0,1,2,3
    for feature_value in set(X_train[:,feature_idx]):
        y_left = y_train[X_train[:,0] <= feature_value]
        y_right = y_train[X_train[:,0] > feature_value]
        print(y_left,y_right)
        print("-"*100)
    break

"""
set(X_train[:,feature_idx]) 的含义:
    从X_train数组的第feature_idx列中选取所有值,并去除任何重复的值,
最后得到一个包含该列所有唯一特征值的集合。(因为set集合的特性是无序的、不包含重复元素的数据结构。)
"""

                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值