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集合的特性是无序的、不包含重复元素的数据结构。)
"""