机器学习编程作业-聚类

作业说明

任务1:对地理数据应用二分k-均值算法聚类。
问题:你的朋友Drew希望你带他去城里庆祝他的生日。由于其他一些朋友也会过来,所以需要你提供一个大家都可行的计划。Drew给了你希望去的69个地址和相应的经纬度。你要决定将这些地方进行聚类的最佳策略,这样可以安排交通工具抵达这些簇的质心,然后步行到每个簇内地址。
准备数据:用Python解析文本文件,根据经纬度信息计算球面距离。
分析数据:使用Matplotlib构建一个二维数据图,其中包含簇与地图
聚类算法:应用二分k-均值算法,最后的输出是包含簇及簇中心的地图。

任务2:根据用户采集的WiFi信息对用户进行聚类。数据集是之前作业里的经典WiFi信息数据。

由于聚类的作业是考完试之后再布置的,基本上没有什么印象了

任务1:对地理数据应用二分k-均值算法聚类

不记得这个作业怎么搞的了,也可能是作业里直接给出了代码?直接贴代码吧

# numClust为簇数目
def clusterClubs(numClust=5):
    datList = []
    #导入数据
    for line in open('places.txt').readlines():
        lineArr = line.split('\t')
        datList.append([float(lineArr[4]), float(lineArr[3])])
    datMat = mat(datList)
    #采用二分k-均值算法进行聚类
    myCentroids, clustAssing = biKmeans(datMat, numClust, distMeas=distSLC)
    #定义画布,背景
    fig = plt.figure()
    rect = [0.0, 0.0, 1.0, 1.0]
    scatterMarkers = ['s', 'o', '^', '8', 'p', 'd', 'v', 'h', '>', '<']
    axprops = dict(xticks=[], yticks=[])
    ax0 = fig.add_axes(rect, label='ax0', **axprops)
    imgP = plt.imread('Portland.png')
    ax0.imshow(imgP)
    ax1 = fig.add_axes(rect, label='ax1', frameon=False)
    for i in range(numClust):
        ptsInCurrCluster = datMat[nonzero(clustAssing[:, 0].A == i)[0], :]
        markerStyle = scatterMarkers[i % len(scatterMarkers)]
        ax1.scatter(ptsInCurrCluster[:, 0].flatten().A[0], ptsInCurrCluster[:, 1].flatten().A[0], marker=markerStyle, s=90)
    ax1.scatter(myCentroids[:, 0].flatten().A[0], myCentroids[:, 1].flatten().A[0], marker='+', s=300)
    plt.show()

任务2:根据用户采集的WiFi信息对用户进行聚类

聚类也可以用 sklearn库中的函数搞定,比如最经典的kmeans算法
from sklearn.cluster import KMeans
数据的处理就按照之前的代码稍微改一下就好了

def clusterAnalysis(mod, featureData):
    # 聚成4类数据,统计每个聚类下的数据量,并且求出他们的中心
    r1 = pd.Series(mod.labels_).value_counts()
    r2 = pd.DataFrame(mod.cluster_centers_)
    r = pd.concat([r2, r1], axis=1)
    r.columns = list(featureData.columns) + [u'类别数目']
    # print(r)
    # 给每一条数据标注上被分为哪一类
    r = pd.concat([featureData, pd.Series(mod.labels_, index=featureData.index)], axis=1)
    r.columns = list(featureData.columns) + [u'聚类类别']
    # print(r.head())
    return r


def clusterVisual(r, k):
    # 可视化过程
    ts = TSNE()
    ts.fit_transform(r)
    ts = pd.DataFrame(ts.embedding_, index=r.index)
    tagList = ['r.', 'go', 'b*', 'k+', 'yD']
    for i in range(k):
        a = ts[r[u'聚类类别'] == i]
        plt.plot(a[0], a[1], tagList[i])
    plt.show()

不要问这个函数是什么意思,问就是参考别人的。我也不记得了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值