zoukankan      html  css  js  c++  java
  • python学习笔记 python实现k-means聚类

      1 # -*- coding: utf-8 -*-
      2 """
      3 Created on Thu Mar 16 14:52:58 2017
      4 
      5 @author: Jarvis
      6 """
      7 import tensorflow as tf
      8 import numpy as np
      9 import pandas as pd
     10 import math
     11 import random
     12 from pandas import Series,DataFrame
     13 def cal_dis(a,b):
     14     sum = 0
     15     for x,y in zip(a,b):
     16         sum = sum+(x-y)*(x-y)
     17     return math.sqrt(sum)
     18 
     19 def is_same_series(a,b):
     20     
     21     for x,y in zip(a,b):
     22         if x != y:
     23             return False
     24     return True
     25 def is_constant_vec(a,b):
     26     if len(a) == 0 or len(b) == 0:
     27         return False
     28     
     29     for x,y in zip(a,b):
     30         if not is_same_series(x,y):
     31             return False 
     32     
     33     return True 
     34 
     35 def init_typeSet(init_set,type_num):
     36     for i in range(type_num):
     37         init_set.append([])
     38     return init_set
     39 
     40 def Mindis_type_no(x,vecs,typ_num = 4):
     41     mindis = cal_dis(x,vecs[0])
     42     ans = 0
     43     for i in range(1,type_num):
     44         tmp  = cal_dis(x,vecs[i])
     45         if mindis > tmp:
     46             ans= i
     47             mindis = cal_dis(x,vecs[i])
     48     return ans
     49 
     50 def reduce_mean(vecs):
     51     
     52     reduce_vec = vecs[0].copy()
     53     print(reduce_vec)
     54     for i in range(1,len(vecs)):
     55         print (vecs[i][5])
     56         print (reduce_vec[5])
     57         reduce_vec = reduce_vec+vecs[i]
     58     
     59         print (reduce_vec[5])
     60     
     61     reduce_vec = reduce_vec/len(vecs)
     62 #    print(reduce_vec)
     63     return reduce_vec
     64 def get_vecs(sets):
     65     vecs = []
     66     for i in sets:
     67         vecs.append(data.ix[i])
     68     return vecs
     69 
     70 raw_data_file = pd.read_csv('NDVI_NDWI_all.csv',header = None,encoding = 'gbk')
     71 data = (raw_data_file)
     72 del data[0]
     73 del data[1]
     74 del data[2]
     75 
     76 type_num = 4
     77 init_type_vec = []#类质心
     78 tmp_set = set([])
     79 data_size = len(data)
     80 
     81 while (len(tmp_set) < type_num):
     82      tmp_set.add(random.choice(range(data_size)))
     83 
     84 for i in tmp_set:
     85     tmp = data.ix[i]
     86     init_type_vec.append(tmp)
     87 
     88 pre_vec = []
     89 #print (is_constant_vec(pre_vec,init_type_vec))
     90 
     91 while( not is_constant_vec(pre_vec,init_type_vec)):
     92     type_set = []
     93     type_set = init_typeSet(type_set,type_num)
     94     for j in range(len(data)):
     95         tmp_type = Mindis_type_no(data.ix[j],init_type_vec)
     96         type_set[tmp_type].append(j)
     97         #type_set[tmp_type].append(data.ix[j])
     98     if(len(pre_vec) == 0):
     99         pre_vec = init_type_vec.copy()
    100     else:
    101         for i in range(type_num):
    102             pre_vec[i] = init_type_vec[i]
    103             need_cal_vecs = get_ves(type_set[i])
    104             init_type_vec[i] = reduce_mean(need_cal_vecs).copy()
    105 for i in range(type_num):
    106     print('--------------------------------')
    107     print(type_set[i])
    108     
    109     
    110 with open('output.txt',"w"):
    111     for i in range(type_num):
    112         print ("type %d"%i)
    113         for j in type_set[i]:
    114             print(j)
    115     
    116 #print(reduce_mean(type_set))
    117 #for i in range(type_num):
    118      #   pre_vec[i] = tf.reduce_mean()
    View Code
  • 相关阅读:
    JAVA基础——异常详解
    Android Studio如何配置adb以及常用命令
    利用Android Studio编写 Android上的c与c++程序
    启动与销毁Activity
    应用资源概览
    Android 开发者文档 -- 应用基础知识
    51单片机最小系统
    同相放大器
    反相放大器
    面向对象开发C++快速入门视频教程 C++基础加实战视频教程
  • 原文地址:https://www.cnblogs.com/silence-tommy/p/6561940.html
Copyright © 2011-2022 走看看