第25集python机器学习预处理对监督

小提示:transform的快捷方式与高效的替代方法,通常来说,你想要在某个数据集上fit一个模型,然后再将其transform。这是一个非常常见的任务,可以比先调用fit再调用transform更搞笑的方法来计算。对于这种使用场景,所有具有transform方法的模型也都具有fit_transform。代码如下:

fromsklearn.preprocessingimportStandardScaler

scaler=StandardScaler()

#使用方法链依次调用fit和transform

x_scale=scaler.fit(x).transform(x)

print(x_scale=,x_scale)

#直接使用fit_transform

x_scaled=scaler.fit_transform(x)

print(x_scaled=,x_scaled)

运行结果如下:

x_scale=[[0.-1.]

x_scaled=[[0.-1.]

可以看出,运行结果相同,但是快捷方式更加简洁,尽管fit_transform不一定对所有模型都更加有效,但在尝试变换训练集时,该方法不失为一种很好的方法。

现在我们回到cancer数据集,观察使用MinMaxScaler对学习SVC的作用,这是一种不同的方法,我们再次在原始数据上拟合SVC,对应代码如下:

fromsklearn.svmimportSVC

x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)

svm=SVC(C=)

svm.fit(x_train,y_train)

print(testsetaccuracy:{:.2f}.format(svm.score(x_test,y_test)))

#使用0-1缩放进行预处理

scaler=MinMaxScaler()

x_train_scaled=scaler.fit_transform(x_train)

x_test_scaled=scaler.fit_transform(x_test)

#在缩放后的数据上学习SVM

svm.fit(x_train_scaled,y_train)

#然后再看输出的分数

print(Scaledtestsetaccuracy:{:.2f}.format(svm.score(x_test_scaled,y_test)))

#下面我们利用零均值和零方差的缩放方法来进行预处理

fromsklearn.preprocessingimportStandardScaler

scaler=StandardScaler()

x_train_scaled=scaler.fit_transform(x_train)

x_test_scaled=scaler.fit_transform(x_test)

#在缩放后的数据上学习SVM

svm.fit(x_train_scaled,y_train)

#然后再看输出的分数

print(Scaledtestsetaccuracy:{:.2f}.format(svm.score(x_test_scaled,y_test)))

运行结果如下:

testsetaccuracy:0.63

Scaledtestsetaccuracy:0.86

Scaledtestsetaccuracy:0.95

由上述运行结果我们可以看到,没用经过缩放的数据的测试精度很低,而经过所放置后测试精度都得到大幅提升,只是使用的缩放方法不一样,预测精度提升效果不一样而已。

降维特征提出与流行学习:前面讨论过,利用无监督学习进行数据变换可能有很多目的。最常见的是可视化,压缩数据,以及寻找信息量更大的数据表示以用于进一步处理。

为了实现这些目的,最简单也是最常用的一种算法就是主成分分析,另外还有非负矩阵分解(NMF)和t-SNE,前者用于特征提取,后者常用于二维散点图的可视化。

主成分分析:主成分分析是一种旋转数据集的方法,旋转后的特征在统计上不相关。在做完这种旋转后,通常是根据数据新特征对解释数据的重要性来选择它的一个子集。如下图是一PCA对一个模拟二维数据集的作用:

mglearn.plots.plot_pca_illustration()

利用PCA做数据变换

第一张图显示的是原始数据点,不同颜色区分对应的数据,算法首先找到方差最大的方向,将其标记为成分1,这也是数据中心包含最多信息的方向,也就是沿着这个方向的特征量最为相关。然后,算法找到与第一个方向正交(成直角)且包含最多信息的方法作为成分2(这里一定要朝着最多信息的方向)。

第二张图显示的是同样的数据,不过将其进行了翻转,使得第一主成分和X轴平行。在旋转之前,从数据中减去平均值,使得变换之后以0位中心。在PCA找到的旋转表示中,两个坐标轴是不相关的,也就是说,对于这种数据表示,除了对角线,相关矩阵全部为0。

我们可以通过仅仅保留一个主要成分来使用PCA进行降维,这样可以分别得到图3和图4的降维结果,这种处理方式有利于去除数据中的噪声影响,将数据中的主成分信息可视化。




转载请注明:http://www.aierlanlan.com/cyrz/1111.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了