理论部分

经验风险最小化(ERM)
经验风险是用经验训练出来的函数与经验的loss
excess risk是 训练出的模型的loss - 最优可能模型的loss

我们希望泛化能力强,也即经验样本和实际分布偏差小。那么偏差的幅度和概率怎么测算呢?Concentration Inequalities
Markov不等式(基本)、Chebyshev不等式(把方差用在Markov上)、Hoeffding 不等式(Chernoff 方法 + Hoeffding 引理获得)

尾部事件(Tail Event)就是指某个随机变量“远离平均值(期望)”的事件。看概率图的尾巴就是

MGF矩母函数很重要。可以泰勒展开出所有的k阶矩。在相关不等式的分析中也很有用。

东西又多又难 麻烦 that’s enough. 稍微学学得了

代码实践部分

最大最小缩放 $x′=\frac{\max(x)−\min(x)}{x−\min(x)}$

numpy的切片操作[:, :2]

  • : 表示选取所有行(即所有 150 个样本);
  • :2 表示选取前两列(索引 0 和 1)

.data:特征(features)——通常是一个二维的数组,形状是 (样本数, 特征数)

.target:标签(labels / targets)——通常是一维数组,表示每个样本的类别或数值目标。用于分类的

标准化:使均值变为 0,标准差变为 1

归一化:缩放到某个固定范围内

L2 归一化:向量长度为1

x=np.array([1, 2, 3])是个纯一维向量

X=x[:,np.newaxis]把它变成了二维但只有一列的向量,意义同x.reshape(-1,1)然后X=x。-1的意思是任意行,1是1列。比如从[0,1,2]变成
[[0]
[1]
[2]]

sklearn中默认行是样本,列是特征。X.squeeze()可以把它再拍回成1维向量

model.fit是拟合。根据model(属于某种estimator)的种类会自动做

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42) 这样可以划分数据集。random_state是种子

knn = neighbors.KNeighborsClassifier(n_neighbors=5)。找knn里属于哪种的多我就返回哪种,概率就取knn里不同分类的数量比。

SVC是支持向量机。支持向量机找到一个超平面来分类数据。由于可以加维,所以支持非线性分类

model.fit(X,y),其中y是标签分类的一维向量,所以用小写

随机森林:随机取数据集中一部分训练多颗决策树,综合各棵决策树的结果。max_features是每棵树挑几个特征划分,值小就可以增加随机性,默认是sqrt。

无监督学习有降维、聚类、密度估计等算法

PCA 中的“方差比例”指的是每个主成分所解释(保留)了原始数据多少比例的信息量(方差)。比如第一个成分50%,第二个成分30%,那两个成分就解释了80%的方差。

MLE可以自动选最优维度数。

对于有 $k$ 个类别的问题,混淆矩阵(confusion matrix)是一个 $k \times k$ 的矩阵,每一行代表实际标签,每一列代表预测标签,对角线是预测正确的个数,其他位置是预测错误的情况。

这个图挺好

Isomap是一种非线性降维算法,比PCA更适合处理非线性流形结构的数据。原理没学,好像和图挺有关的。

Logistic Regression逻辑回归在用于分类时候,就是神经网络的那个基本单元。对特征线性加权,然后用sigmoid函数激活(也可以得到概率)。

confusion matrix可以图形化,用颜色深浅

ShuffleSplitscikit-learn 中的一种交叉验证方法,用来将数据集随机划分为训练集和测试集,多次重复这一过程,适合在没有固定划分规则的情况下使用。随机划分训练集和测试集(每次都洗牌)

GridSearchCV会自动尝试多个参数组合,并通过交叉验证找到效果最好的那一组参数。