所有代码都上传到gitee仓库,可自行下载machine_learning: 机器学习基础教程 作者andreas 读书笔记代码 (gitee.com)
1 分类
数据集变换(无监督变换,unsupervised transformation)和聚类
1.1 数据集变换
创建数据的新的表示方法,因为新数据可以让机器学习模型更容易理解
一个常见应用是数据降维,即将多特征数据转化成特征数量少的数据,降维还可以将数据可视化
另一个常见应用是找到数据的各个组成部分,比如从文本中提取主题
1.2 聚类算法
原理 将数据划分成不同的组,每组包含相似的内容
例子 从一堆照片识别出某人的所有照片,然后将这人照片分成一个组
2 难点
因为无监督,所以不知道学习的结果是否正确与准确
3 作用
作为监督学习的预处理步骤,提高监督学习准确率
特征提取,数据缩放预处理
4 预处理和缩放
4.1 预处理
本节预处理主要讲了放缩
4.1.1 不同类别预处理
StandardScaler 将数据所有特征处理为0-1范围内的值(减平均值除标准差),但不能保证特征值有特定的最值
RobustScaler 和StandardSccaler类似,只是用的是中位数和四分位数,而不是均值和标准差
MinMaxScaler 移动数据,使范围在0-1之间
Normalizer 使每个点特征向量的欧式长度为1(模长度?),也就是说每个特征向量放缩程度不一样
4.1.2 应用数据变换
看个例子,对多特征数据和两个特征数据缩放,看是否缩放成功
训练集和测试集使用单独的scaler会导致放缩不一致,无法将测试集特征范围放缩到0-1范围内,如要保证train和test集都在0-1需使用同一个scaler
def test_scale_cancer_minmax(self):
xtr, xte, ytr, yte = train_test_split(self.cancer.data, self.cancer.target, random_state=1)
print(f'origin cancer data and target shape: {self.cancer.data.shape}, {self.cancer.target.shape}')
scaler = MinMaxScaler().fit(xtr)
xtr_scaled, xte_scaled = scaler.transform(xtr), scaler.transform(xte)
print(f'transformed shape: {xtr_scaled.shape}')
print(f'feature min:{xtr.min(axis=0)}\nmax:{xtr.max(axis=0)},\nfeature scaled min:{xtr_scaled.min(axis=0)}\nscaled max:{xtr_scaled.max(axis=0)}')

4.1.3 对测试集和训练集进行相同缩放
看个例子,对比缩放前后特征值最大最小值,看测试集和训练集缩放结果,是否缩放比例一致。实际发现缩放后特征值已在范围0-1内
def test_scale_blob_minmax(self):
xtr, xte, _, _ = train_test_split(*self.blob, random_state=5, test_size=.1)
fig, axes = plot.subplots(1, 3, figsize=(13, 4))
axes[0].scatter(xtr[:, 0], xtr[:, 1], c=mglearn.cm2(0), label='train set', s=60)
axes[0].scatter(xte[:, 0], xte[:, 1], c=mglearn.cm2(0), marker='^', label='test set', s=60)
axes[0].legend(loc='upper left')
axes[0].set_title('origin data')
scaler = MinMaxScaler().fit(xtr) # data = Scaler().fit_transform(input)
xtr_scaled, xte_scaled = scaler.transform(xtr), scaler.transform(xte)
axes[1].scatter(xtr_scaled[:, 0], xtr_scaled[:, 1], c=mglearn.cm2(0), label='train set', s=60)
axes[1].scatter(xte_scaled[:, 0], xte_scaled[:, 1], c=mglearn.cm2(0), label='test set', s=60, marker='^')
axes[1].set_title('scaled data')
te_scaler = MinMaxScaler().fit(xte)
xte_scaled_bad = te_scaler.transform(xte)
axes[2].scatter(xtr_scaled[:, 0], xtr_scaled[:, 1], c=mglearn.cm2(0), label='train set', s=60)
axes[2].scatter(xte_scaled_bad[:, 0], xte_scaled_bad[:, 1], c=mglearn.cm2(0), label='test set', s=60, marker='^')
axes[2].set_title('improperly scaled test data')
for ax in axes:
ax.set_xlabel('feature 0')
ax.set_ylabel('feature 1')
plot.show()

这几个图是两个特征数据集缩放情况,发现测试集和训练集单独使用scaler无法保证缩放两者缩放比例一致
4.1.4 预处理对监督学习作用
对比下对特征值范围敏感的模型SVC放缩前后准确度
def test_predict_cancer_scaled(self):
xtr, xte, ytr, yte = train_test_split(self.cancer.data, self.cancer.target, random_state=0)
svm = SVC(C=100).fit(xtr, ytr)
print(f'SVC accuracy: {svm.score(xte, yte)}')
scaler = MinMaxScaler().fit(xtr)
xtr_scaled, xte_scaled = scaler.transform(xtr), scaler.transform(xte)
svm.fit(xtr_scaled, ytr)
print(f'SVC scaled accuracy: {svm.score(xte_scaled, yte)}')
![]()
4.2 降维,特征提取,流形学习
4.2.1 主成分分析(PCA,principal component analysis)
概念 是一种旋转数据集的方法,旋转后的特征在统计上不相关
主成分 在数据集样本中找到方差最大的方向,这个方向叫主成分
看个例子辅助理解


最低0.47元/天 解锁文章
1202

被折叠的 条评论
为什么被折叠?



