博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用KMains算法实现成绩的预测(并对一些数据进行可视化)
阅读量:3959 次
发布时间:2019-05-24

本文共 3364 字,大约阅读时间需要 11 分钟。

KMains算法的原理:

通过K-Main算法实现对成绩的预测,K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
假设要把样本集分为k个类别,算法描述如下:
  (1)适当选择k个类的初始中心,最初一般为随机选取;
  (2)在每次迭代中,对任意一个样本,分别求其到k个中心的欧式距离,将该样本归到距离最短的中心所在的类;
  (3)利用均值方法更新该k个类的中心的值;
  (4)对于所有的k个聚类中心,重复(2)(3),类的中心值的移动距离满足一定条件时,则迭代结束,完成分类。
Kmeans聚类算法原理简单,效果也依赖于k值和类中初始点的选择。

import numpy as npfrom sklearn.cluster import KMeansimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom pyecharts.charts.map import Mapfrom pyecharts.charts.line import Linedf = pd.DataFrame(pd.read_excel('成绩.xls'))#放成绩的excel文档,存放两门数据。Linux成绩和云计算成绩,各13个。print(df)print(df.describe())plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = Falsesns.set()sns.distplot(df.云计算, bins=5, hist=True, kde=False)plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False# 散点图fig = plt.figure()ax = fig.add_subplot(1, 1, 1)ax.scatter(df['Linux'], df['云计算'])plt.xlabel('Linux')plt.ylabel('云计算')plt.title('Linux和云计算成绩散点图')plt.show()# 箱形图fig = plt.figure()ax = fig.add_subplot(1, 1, 1)plt.title('云计算')ax.boxplot(df['云计算'])plt.show()# 家庭地址city = ['太原市', '大同市', '忻州市', '临汾市', '运城市', '吕梁市']values = [3, 1, 1, 2, 4, 2]map = Map("学生家乡", '山西', width=1200, height=600)map.add('山西', city, values, visual_range=[1, 10], maptype='山西', is_visualmap=True, visual_text_color='#000')map.render(path="./山西地图.html")def loadData(filePath):    fr = open(filePath, 'r+', encoding='utf-8')    lines = fr.readlines()    studentName = []    studentGrade = []    for line in lines:        items = line.strip().split(",")        studentGrade.append(items[0])        studentName.append([float(items[i]) for i in range(1, len(items))])    return studentName, studentGradeclass SingleLinearRegression:  #最小二乘法,散点图,计算回归曲线    def __init__(self):        self.a_ = None;        self.b_ = None;    def fit(self, x_train, y_train):        x_mean = np.mean(x_train)        y_mean = np.mean(y_train)        fenzi = 0.0;        fenmu = 0.0;        for x_i, y_i in zip(x_train, y_train):            fenzi += (x_i - x_mean) * (y_i - y_mean)            fenmu += (x_i - x_mean) ** 2        self.a = fenzi / fenmu        self.b = y_mean - self.a * x_mean        return self    def predict(self, x_test_group):        result = []        for x_test in x_test_group:  # 对于每个输入的x都计算它对应的预测y值并加入列表中            result.append(self.a * x_test + self.b)        y_predict = np.array(result)  # 将列表转换为矩阵向量形式方便运算        return y_predictif __name__ == '__main__':    name, studentGrade = loadData('D:\\Pycharm\\homework\\成绩.txt')    km = KMeans(n_clusters=4)    label = km.fit_predict(name)    avegrade = np.sum(km.cluster_centers_, axis=1)    StudentCluster = [[], [], [], []]    for i in range(len(studentGrade)):        StudentCluster[label[i]].append(studentGrade[i])    for i in range(len(StudentCluster)):        print("avegrade:%.2f" % avegrade[i])        print(StudentCluster[i])    x = np.array([88, 86, 87, 84, 77, 76, 85, 88, 84, 80, 85, 75, 68])    y = np.array([83, 92, 76, 90, 81, 78, 76, 80, 63, 75, 70, 68, 47])    l = SingleLinearRegression()    l.fit(x, y)    print('Linux分数为90的预测云计算成绩为:')    print(l.predict([90]))    # 画出散点图和预测图    plt.scatter(x, y, color='b')    plt.plot(x, l.predict(x), color='r')  # 画出预测后的线    plt.xlabel('Linux')    plt.ylabel('云计算')    plt.show()

结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载地址:http://uulzi.baihongyu.com/

你可能感兴趣的文章
wireshark检索命令
查看>>
五人分鱼问题(附答案)
查看>>
linux查看文件有多少行
查看>>
error:previous declartion of "XXX" is here的解决方法
查看>>
sha1的几个函数的使用
查看>>
为什么int型的数组用memset不能清零(memset的使用规范)
查看>>
<转>CRC校验、MD5、SHA1算法的概念和可靠性现状
查看>>
linux杀死进程详解
查看>>
字符串表示的IP地址与点分式表示的IP地址间的相互转化
查看>>
implicit declaration of function 这种警告问题的原因及解决方法
查看>>
utorrent如何处理占资源过大的问题
查看>>
<好文分享>妖怪和和尚过河问题
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
utp的包头格式<2>
查看>>
开源搜索引擎的比较(收藏几个博客文章)最近要做搜索系统的研究方向
查看>>
asii码表
查看>>
<读书笔记>WebUsage Mining:Discovery and Applications of Usage Patterns from Web Data
查看>>
并查集(Disjoint Sets)
查看>>
在Linux下安装MATLAB
查看>>