理论部分
经验风险最小化(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可以图形化,用颜色深浅
ShuffleSplit
是 scikit-learn
中的一种交叉验证方法,用来将数据集随机划分为训练集和测试集,多次重复这一过程,适合在没有固定划分规则的情况下使用。随机划分训练集和测试集(每次都洗牌)
GridSearchCV会自动尝试多个参数组合,并通过交叉验证找到效果最好的那一组参数。