7.12
今天确定好了整体安排,同时队长要求我们提出自己的想法,进行讨论。
上次迭代末我已经将自己的想法做了简要总结并跟队长进行了交流,今天主要是对其他成员提出的一些想法和队长的新思路进行讨论。其中很多对前端设计的建议确实直中要害,可以去掉一些没必要的花里胡哨,多一点实际的恰当的灵活的数据分析呈现。
另外队长提到了一种问答形式作为第二次迭代的实现内容。通过观看演示视频,此功能是用户可以通过输入问题来获取数据分析图。我认为此功能确实可以方便用户使用平台,但是其实也只是起到了一个网页查询的作用,因为根据输入产生的具体输出也是基于项目现有的功能的。回忆自己实际浏览网站的实际操作,如果前端功能模块划分足够清晰,导航栏足够合理,是极少使用到这类搜索功能的,且有时网站中有的内容会因为关键字的不同导致搜索不出,从而让用户认为平台并没有该类内容。所以我在这里表达了自己的想法,认为这是一个锦上添花的功能,在完成那些大部头的基础上可以考虑去实现,但不能当做第二次迭代的大部头,第二次迭代还是应该在优化之前功能的基础上优先实现之前讨论的例如数据智能聚合等功能。而且通过分析大家实际情况感觉中间一回家可能进度也并不会比第一次迭代快,还是应该分清功能优先级。
7.13
价格预测模型
对聚类算法进行优化修改:
之前采用的KNN,现在采用K-means的形式
结合我们之前写好的DTW和LB_Keogh算法,和组内成员进行K-means设计:
def k_means_clust(data, num_clust, num_iter, w=3):
## 步骤一: 初始化均值点
centroids = random.sample(list(data), num_clust)
counter = 0
for n in range(num_iter):
counter += 1
# print
# counter
assignments = {} #存储类别0,1,2等类号和所包含的类的号码
# 遍历每一个样本点 i ,因为本题与之前有所不同,多了ind的编码
for ind, i in enumerate(data):
min_dist = float('inf') #最近距离,初始定一个较大的值
closest_clust = None # closest_clust:最近的均值点编号
## 步骤二: 寻找最近的均值点
for c_ind, j in enumerate(centroids): #每个点和中心点的距离,共有num_clust个值
if LB_Keogh(i, j, 3) < min_dist: #循环去找最小的那个
cur_dist = DTWDistance(i, j, w)
if cur_dist < min_dist: #找到了ind点距离c_ind最近
min_dist = cur_dist
closest_clust = c_ind
## 步骤三: 更新 ind 所属簇
# print(closest_clust)
if closest_clust in assignments:
assignments[closest_clust].append(ind)
else:
assignments[closest_clust] = []
assignments[closest_clust].append(ind)
# recalculate centroids of clusters ## 步骤四: 更新簇的均值点
for key in assignments:
clust_sum = 0
for k in assignments[key]:
clust_sum = clust_sum + data[k]
centroids[key] = [m / len(assignments[key]) for m in clust_sum]
return centroids,assignments #返回聚类中心值,和聚类的所有点的数组序号
利用plt对其进行画图展示:
num_clust = 10 #定义需要分类的数量
centroids,assignments = k_means_clust(WBCData, num_clust,800, 3)
for i in range(num_clust):
s = []
WBC01 = []
days01 = []
for j, indj in enumerate(assignments[i]): #画出各分类点的坐标
s.append(int(Numb[indj*150]))
WBC01 = np.hstack((WBC01,WBC[150 * indj:150 * indj + 150]))
days01 = np.hstack((days01 , days[0: 150]))
print(s)
plt.title('%s' % s)
plt.plot(centroids[i],c="r",lw=4)
plt.scatter(days01, WBC01 )
plt.show()
今天电脑总蓝屏,明天再对农产品数据进行聚类。