sklearn-2无监督学习

所有代码都上传到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)

概念 是一种旋转数据集的方法,旋转后的特征在统计上不相关

主成分 在数据集样本中找到方差最大的方向,这个方向叫主成分

看个例子辅助理解

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值