【机器学习】无监督学习系列-python实战

转自:ChallengeHub

A.监督学习

  • 1.EDA(Exploratory Data Analysis)

  • 2.K-Nearest Neighbors(KNN)

  • 3.线性回归

  • 4.交叉验证(CV)

  • 5.正则化回归

  • 6.ROC曲线与逻辑回归

  • 7.超参数调优

  • 8.SVM

B.无监督学习

  • 1.Kmeans聚类

  • 2.聚类效果评价

  • 3.标准化

  • 4.层次分析法

  • 5.T-分布随机近邻嵌入(T-SNE)

  • 6.主成分分析(PCA)

监督学习

可以查看机器学习全面教程-有监督学习篇

无监督学习

  • 无监督学习: 它使用无标记的数据,并从无标记的数据中发现隐藏的模式信息。例如,有些骨科病人数据没有标签,你不知道哪个骨科病人是正常的,哪个是不正常的。

1.Kmeans聚类

  • 让我们尝试我们的第一个无监督的方法,即KMeans Cluster

  • KMeans聚类:该算法基于所提供的特征迭代地将每个数据点分配给K组中的一个。基于特征相似性对数据点进行聚类

  • KMeans(n_clusters = 2): n_clusters = 2表示创建2个簇群

先看数据的分布

# As you can see there is no labels in data
data = pd.read_csv('column_2C_weka.csv')
plt.scatter(data['pelvic_radius'],data['degree_spondylolisthesis'])
plt.xlabel('pelvic_radius')
plt.ylabel('degree_spondylolisthesis')
plt.show()

再看通过Kmeans聚类分类效果

# KMeans Clustering
data2 = data.loc[:,['degree_spondylolisthesis','pelvic_radius']]
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 2)
kmeans.fit(data2)
labels = kmeans.predict(data2)
plt.scatter(data['pelvic_radius'],data['degree_spondylolisthesis'],c = labels)
plt.xlabel('pelvic_radius')
plt.xlabel('degree_spondylolisthesis')
plt.show()

2.聚类效果评价

我们把数据分成两组。这是正确的聚类吗? 为了评估聚类效果,我们将使用交叉表。

  • 有两个集群,分别是0和1

  • 标签0包括138例异常患者和100例正常患者

  • 标签1包括72例异常患者和0例正常患者

  • 两个簇群中大多数为异常患者。

# cross tabulation table
df = pd.DataFrame({'labels':labels,"class":data['class']})
ct = pd.crosstab(df['labels'],df['class'])
print(ct)

上面存在一个问题是,我们事先知道了数据中是几分类问题,但是如果不知道呢? 那这有点像KNN或回归中的超参数问题了。

  • inertia:簇群与每个样本之间的距离

  • 更小的inertia意味着更多的簇

  • 簇群的最佳数量是多少?

  • 更小的inertia,没有太多的簇群平衡,所以我们可以选择elbow

# inertia
inertia_list = np.empty(8)
for i in range(1,8):
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(data2)
    inertia_list[i] = kmeans.inertia_
plt.plot(range(0,8),inertia_list,'-o')
plt.xlabel('Number of cluster')
plt.ylabel('Inertia')
plt.show()

3.标准化

  • 标准化对于监督学习和非监督学习都很重要,可以消除量纲影响

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
scalar = StandardScaler()
kmeans = KMeans(n_clusters = 2)
pipe = make_pipeline(scalar,kmeans)
pipe.fit(data3)
labels = pipe.predict(data3)
df = pd.DataFrame({'labels':labels,"class":data['class']})
ct = pd.crosstab(df['labels'],df['class'])
print(ct)

4.层次分析法

  • 竖线是簇

  • 树状图高度: 归并簇之间的距离

  • 方法= 'single': 表示簇的最近点

from scipy.cluster.hierarchy import linkage,dendrogram

merg = linkage(data3.iloc[200:220,:],method = 'single')
dendrogram(merg, leaf_rotation = 90, leaf_font_size = 6)
plt.show()

5.T-SNE

  • 学习率:正常情况下50-200

  • T-sne只有fit_transform

from sklearn.manifold import TSNE
model = TSNE(learning_rate=100)
transformed = model.fit_transform(data2)
x = transformed[:,0]
y = transformed[:,1]
plt.scatter(x,y,c = color_list )
plt.xlabel('pelvic_radius')
plt.xlabel('degree_spondylolisthesis')
plt.show()

6.PCA

  • 基本的降维技术

  • 第一步是去相关:

    • 旋转数据样本以使其与轴对齐

    • 移动数据样本,使其均值为零

    • 没有信息丢失

    • Fit():学习如何移动样本

    • Transform():应用学到的转换。也可以应用测试集

  • 由此产生的PCA特征不是线性相关的

  • 主成分:是方差方向

# PCA
from sklearn.decomposition import PCA
model = PCA()
model.fit(data3)
transformed = model.transform(data3)
print('Principle components: ',model.components_)
# PCA variance
scaler = StandardScaler()
pca = PCA()
pipeline = make_pipeline(scaler,pca)
pipeline.fit(data3)

plt.bar(range(pca.n_components_), pca.explained_variance_)
plt.xlabel('PCA feature')
plt.ylabel('variance')
plt.show()
  • 第二步:内在维度: 需要特征数量来近似数据背后的基本思想

  • 当样本具有任意数量的特征时,主成分分析识别内在维数

  • 内在维度 = 具有显著方差的PCA特征的数量

  • 为了选择内在维度,尝试所有的方法并找到最佳的精度

# apply PCA
pca = PCA(n_components = 2)
pca.fit(data3)
transformed = pca.transform(data3)
x = transformed[:,0]
y = transformed[:,1]
plt.scatter(x,y,c = color_list)
plt.show()

建议阅读:

高考失利之后,属于我的大学本科四年

【资源分享】对于时间序列,你所能做的一切.

【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

【AI蜗牛车出品】手把手AI项目、时空序列、时间序列、白话机器学习、pytorch修炼

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步



个人微信
备注:昵称+学校/公司+方向
如果没有备注不拉群!
拉你进AI蜗牛车交流群




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值