#分解:可以学习Sklearn的用户指南中独立成分分析、因子分析、稀疏编码等 https://scikit-learn.org/stable/modules/decomposition.html#decompositions
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.decomposition import NMF
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
#加载数据
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)
# 数据预处理与缩放
#StandardScaler 确保每个特征平均值为零、方差为1
'''scaler=StandardScaler()
scaler.fit(X_train)'''
#RobustScaler 确保特征属性在同一范围,使用的是中位数与四分位数,忽略异常值
#MinMaxScaler 特征刚好位于0-1之间
'''scaler=MinMaxScaler()
scaler.fit(X_train)'''
#Normalizer对每个特征向量进行缩放,使其欧式距离等于1
'''X_train_scalered=scaler.transform(X_train)
X_test_scarlered=scaler.transform(X_test)
svc=SVC()
svc.fit(X_train_scalered,y_train)
print(svc.score(X_test_scarlered,y_test))'''
#降维、特征提取、流型学习
#主成分分析;首先找到方差最大的方向向量,然后找到与第一个方向正交的且包含信心量多的正交向量
scaler=StandardScaler()
scaler.fit(cancer.data)
X_scalered=scaler.transform(cancer.data)
'''pca=PCA(n_components=3)#n_components提取三个主成分,从569个属性中组合出来3各主要方向属性,若特征为正数,那么这个主成分与特征相关,一般主成分数与特征数相同
pca.fit(X_scalered)
X_pca=pca.transform(X_scalered)
print(X_scalered[0])
#print(cancer.data[0])
print(pca.components_)'''
#非负矩阵(NMF):将每个数据点写成一些分量的加权求和,分量和系数大于0,且只能应用非负数据。(有用的特征提取)
'''nmf=NMF(n_components=15)#提取15个分量
X_nmf=nmf.fit(X_scalered)'''
#t-SNE流形学习:找到数据的二维表示,允许更复杂的映射,主要用来做可视化。
'''tsne=TSNE(random_state=4)
X_tsne=tsne.fit_transform(cancer.data)#tnse没有transform方法
print(X_tsne[0])'''
#聚类
#k均值聚类:将每个数据点分配分配给最近的簇中心,然后将每个簇中心设置成簇内所有数据点的平均值,直到簇不在变化。
kmeans=KMeans(n_clusters=5)
kmeans.fit(cancer.data)
print(kmeans.labels_)
#凝聚聚类:首先默认每个点是自己的簇,然后合并最相似的两个簇,直到满足某种停止规则。
#DBSCAN:首先任意选取一个点,然后找到到这个点的距离小于等于eps的所有点,若这些数据点数小于min_samples,那么这个点被标记为噪声,若大于min_samples,则这个点为核心样本。
#调整rand指数和归一化信息