質問編集履歴

2 書式の改善 コメント文の訂正

kouk

kouk score 5

2016/10/03 03:53  投稿

データ分類のプログラムの作成が出来ません
###前提・実現したいこと
ここに質問したいことを詳細に書いてください
クラスタリングのプログラムを作成中
与えたデータに対してランダムに代表点を決めその代表点から最も遠い点を計算し
その最も遠い点から決めたデータ数分近いデータを同じグループとして分類するプログラムです
決められたデータ数未満のデータが残った場合そのデータと分けられたそれぞれの代表点との距離を計算し
近い代表点のグループに分類します
全データが分けられた時点で終了とします
###発生している問題・エラーメッセージ
1各点にランダムにクラスタ(グループ)を割り当てる
2クラスタの重心を計算する。
3点のクラスタを、一番近い重心のクラスタに変更する
4変化がなければ終了。変化がある限りは 2. に戻る。
このk-meansと呼ばれるプログラムに現在なっているので 実現したいことの書いたようなプログラムに変更してもらいたいです よろしくお願いします
エラーメッセージ
```
###該当のソースコード
python
ここにご自身が実行したソースコードを書いてください
## coding: utf-8
##Hard c-means(k-means)のプログラム
##モジュールは Python の定義や文が入ったファイル
##SciPyはNumPyを基盤にした科学計算ライブラリ
##matplotlib - NumPyを基盤にしたグラフ描画ライブラリ
##Pandas - データの操作や解析のためのライブラリ
import sys ##重要な関数を使える為のimport
import numpy as np ##numpyの関数を使えるようにする関数
import scipy.spatial.distance as dist ##scipyのなんか関数import
from matplotlib import pylab
from matplotlib.font_manager import FontProperties  ##matplotlibで日本語を使うための準備
C = 2         #クラスタ数
ROOP = 20     #アルゴリズムの繰り返し回数
objE = 0.0001  #目的関数の収束に使用する定数
##入力するデータファイル
fileName = "sampleN100C2Labeled" # データ数100、次元数2、クラスタ数2
##fileName = "PolarisLabeled" # データ数51、次元数2、クラスタ数3
##fileName = "CrossC5N125Labeled" # データ数125、次元数2、クラスタ数5
##fileName = "CorelationC5N125Labeled" # データ数125、次元数2、クラスタ数5
def scale(argX):
   """データ行列Xを属性ごとに正規化したデータを返す"""
   """正規化とは平均0、分散1に変換すること"""
   ##次元の数(=列の数)
   col = argX.shape[1]
   
   ## 次元ごとに平均値と標準偏差を計算
   mu = np.mean(argX, axis=0)  #縦の並びがaxis 0, 横の並びがaxis 1
   
   col = argX.shape[1]#次元の数(=列の数)
   
   
   mu = np.mean(argX, axis=0) #次元ごとに平均値と標準偏差を計算 #縦の並びがaxis 0, 横の並びがaxis 1
   sigma = np.std(argX, axis=0) #axisなしだと全体の平均
   
   ## 次元ごとにデータを正規化
   for i in xrange(col):
   
   for i in xrange(col): #次元ごとにデータを正規化
       argX[:,i] = (argX[:,i] - mu[i]) / sigma[i]
   
   return argX
if __name__ == "__main__":
   ## 入力データの格納
   data = np.genfromtxt("Data/" + fileName + ".txt")
   
   X = data[:, 0:-1]  #ラベル付きデータを扱う場合にラベルを除去
   ##X = data[:, :]
   
   data = np.genfromtxt("Data/" + fileName + ".txt")#入力データの格納
   
   X = data[:, 0:-1]  #ラベル付きデータを扱う場合にラベルを除去 ##X = data[:, :]
   X = scale(X)
   N = len(X)   # データ数
   P = X.shape[1]
   ##print "X = ", X
   ##print "Label = ", Label
   P = X.shape[1] ##print "X = ", X ##print "Label = ", Label
   print "N = %d, P = %d, C = %d" % (N, P, C)
   Label = data[:, -1]  #Label付きデータを扱う場合に必要
   ##print "Label = ", Label
   ##RIの結果を保存する配列
   listRI = []
   Label = data[:, -1]  #Label付きデータを扱う場合に必要 ##print "Label = ", Label
   
   listRI = [] ##RIの結果を保存する配列
   np.random.seed()    #乱数の列を固定
   ##各個体の所属クラスタ
   listClus = []
 
   listClus = [] ##各個体の所属クラスタ
   for k in xrange(N): listClus.append( 0 )  #初期化
       
   ##目的関数の値の初期化
   objVal = sys.maxsize
   #print "objValの初期値", objVal
   ##mainループ(Start)---------------------------
   numOfRoop = 0
   ##Vの初期化(Start)-------------------------------
   V = np.zeros( (C, P) )
   ##初期Vとなる個体の番号を選択--------------------
   initV = np.random.choice(xrange(N), C, replace = False)
   
   objVal = sys.maxsize ##目的関数の値の初期化
 
 
   numOfRoop = 0 ##mainループ(Start)---------------------------
 
   V = np.zeros( (C, P) ) ##Vの初期化(Start)-------------------------------
   
   initV = np.random.choice(xrange(N), C, replace = False)##初期Vとなる個体の番号を選択--------------------
   print "初期クラスタ中心となる個体は ", initV
   V = X[ initV ]
   print "Vの初期値は \n", V           
   ##Vの初期化(End)-------------------------------
   ##非類似度行列Dの初期化(Start)-------------------------------
   D = np.zeros( (N, C) )
   print "Vの初期値は \n", V  ##Vの初期化(End)-------------------------------
   
   
   D = np.zeros( (N, C) ) ##非類似度行列Dの初期化(Start)-------------------------------
   D = dist.cdist(X, V, 'sqeuclidean')  #非類似度にユークリッド距離の自乗を設定
   ##print "D = ", D
   ##非類似度行列Dの初期化(End)-------------------------------
##ランダムに代表点を設定しデータ間の最大値を計算できない
   ##アルゴリズムのループ(Start)-------------------   
   while True:
       ##帰属度行列Muの更新(Start)-----------------------------
       Mu = np.zeros( (N, C) )
   
   
   while True:##アルゴリズムのループ(Start)-------------------   
       
       Mu = np.zeros( (N, C) )##帰属度行列Muの更新(Start)-----------------------------
       for k in xrange(N):
           for i in xrange(C):
               if( D[k][i] == np.min( D[k] ) ):
                   Mu[k][i] = 1
                   break
       ##print "Mu = ", Mu
       ##帰属度行列Muの更新(End)-------------------------------
                   break ##帰属度行列Muの更新(End)-------------------------------
       
     
               
       ##クラスタ中心の行列Vの更新(Start)-------------------------
       for i in xrange(C):
       
       for i in xrange(C): ##クラスタ中心の行列Vの更新(Start)----------------------
           vBunshi = 0.0
           vBunbo = np.sum(Mu[:,i], axis=0)
           for k in xrange(N):
               vBunshi += Mu[k][i] * X[k]
           V[i] = vBunshi / vBunbo
       ##print "V = ", V
       ##クラスタ中心の行列Vの更新(End)---------------------------
           V[i] = vBunshi / vBunbo ##クラスタ中心の行列Vの更新(End)---------------------------
       
     
           
       ##非類似度行列Dの更新(Start)-------------------------------
       D = dist.cdist(X, V, 'sqeuclidean')
       ##print "D = ", D
       ##非類似度行列Dの更新(End)-------------------------------
       ##目的関数の値を更新(Start)-------------------------------
       newObjVal = np.sum(Mu * D)
       ##print "newObjVal = ", newObjVal
       ##目的関数の値を更新(End)-------------------------------
       ##ループ回数と目的関数の値を出力(必要なし)
       print "numOfRoop = ", numOfRoop, "\t newObjVal = ", newObjVal
       ##目的関数が収束するか、ループ回数が上限に達したら終了(##全データをグループ化すると終了に変更)
     
       D = dist.cdist(X, V, 'sqeuclidean') ##非類似度行列Dの更新
       newObjVal = np.sum(Mu * D) ##目的関数の値を更新
       
       
       print "numOfRoop = ", numOfRoop, "\t newObjVal = ", newObjVal##ループ回数と目的関数の値を出力(必要なし)
       
       if numOfRoop == ROOP or np.abs(objVal - newObjVal) < objE :
           break
       ##上記以外の場合は目的関数の値とループ回数を更新してアルゴリズムを続行   
       else:
           break ##目的関数が収束するか、ループ回数が上限に達したら終了(##全データをグループ化すると終了に変更)
     
       else: ##上記以外の場合は目的関数の値とループ回数を更新してアルゴリズムを続行   
           objVal = newObjVal
           numOfRoop += 1
   ##所属クラスタの決定(Start)------------------------
   for k in xrange(N):
   
   for k in xrange(N): ##所属クラスタの決定
       for i in xrange(C):
           if( Mu[k][i] == np.max( Mu[k] ) ):
               listClus[k] = i + 1
   ##print "listClus = ", listClus
   ##所属クラスタの決定(End)--------------------------
   ##各クラスタの所属個体数を更新(Start)------------------------
       listNumOfClus = []
   
   
   
       listNumOfClus = [] ##各クラスタの所属個体数を更新
       for i in xrange(C):
           listNumOfClus.append( np.sum(Mu[:,i], axis=0) )
   ##print "listNumOfClus = ", listNumOfClus  
   ##各クラスタの所属個体数を更新(End)------------------------  
 
   print "アルゴリズム終了 ----------"
   print "ループ回数は %d, 目的関数の値は %f" %(numOfRoop, objVal)
   print "N = %d, P = %d, C = %d" % (N, P, C)
   print "各クラスタの個体数 = ", listNumOfClus
   ##print "クラスタ中心 = ", V
   ##print "帰属度 = ", Mu
   
   
   ##----------------------------------------------
   ##ファイル出力
   ##----------------------------------------------
   ##データと所属クラスタの出力
   outputData = np.zeros( (N, P+1), )
 
   
   
   
   ------------------ファイル出力---------------------------
   
   
   outputData = np.zeros( (N, P+1), )##データと所属クラスタの出力
   for k in xrange(N):
       for j in xrange(P+1):
           if(j<P): outputData[k][j] = float(data[k][j])
           else: outputData[k][j] = listClus[k] 
   np.savetxt('outData.txt', outputData, fmt='%.5f')
   
   ##Betaの出力
   np.savetxt('outV.txt', V, fmt='%.5f')
   ##Muの出力
   np.savetxt('outMu.txt', Mu, fmt='%.5f')
   ##RIの出力
   ##np.savetxt('outRI.txt', arrayRI, fmt='%.5f')   
   ##----------------------------------------------
   
   
   ##----------------------------------------------
   ##表示関係
   ##----------------------------------------------
   
   ##描画範囲の計算
   ##minX0 = np.min(X[:,0])
   ##maxX0 = np.max(X[:,0])
   ##minX1 = np.min(X[:,1])
   ##maxX1 = np.max(X[:,1])
   ##print "minX0 = %d, maxX0 = %d, minX1 = %d, maxX1 = %d" % (minX0, maxX0, minX1, maxX1)
   
   ##日本語テキスト描画の準備
   fp = FontProperties(fname=r'/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf') ## IPAフォント
   
   np.savetxt('outV.txt', V, fmt='%.5f')##Betaの出力
   
   np.savetxt('outMu.txt', Mu, fmt='%.5f')##Muの出力
 
   np.savetxt('outRI.txt', arrayRI, fmt='%.5f')   ##RIの出力
   
   
   
   
   -----------表示関係------------
   
   
   
 
   fp = FontProperties(fname=r'/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf') ##日本語テキスト描画の準備 ## IPAフォント
   color = ['r', 'b', 'g', 'm', 'y', 'c', 'w']  # C < 7と想定
   symbol = ['o', 'x', '+', 's', '*', '^', 'p']
   ##図のオプションなど
   --------------図のオプションなど------------------
   pylab.figure(figsize=(8,8))  #描画範囲を正方形に変更 デフォルトは(8,6)%%   
   ##pylab.xlabel(u'説明変数', fontproperties=fp, fontsize=15)
   ##pylab.ylabel(u'目的変数', fontproperties=fp, fontsize=15)
   ##pylab.title(u'クラスタリングの結果', fontproperties=fp, fontsize=15)
   pylab.xlabel(u'説明変数', fontproperties=fp, fontsize=15)
   pylab.ylabel(u'目的変数', fontproperties=fp, fontsize=15)
   pylab.title(u'クラスタリングの結果', fontproperties=fp, fontsize=15)
   pylab.grid(True)  #gridの表示
   ##pylab.axis([minX0-1, maxX0+1, minX1-1, maxX1+1])  #描画範囲の指定
   ##pylab.axis([-3.0, 3.0, -3.0, 3.0])  #描画範囲の指定
   pylab.axis([minX0-1, maxX0+1, minX1-1, maxX1+1])  #描画範囲の指定
   pylab.axis([-3.0, 3.0, -3.0, 3.0])  #描画範囲の指定
   pylab.axis([-2.5, 2.5, -2.5, 2.5])  #描画範囲の指定
   ##pylab.axis([-1, 81, -1, 81])  #描画範囲の指定
   
   ##結果の表示
   for i in xrange(C):
   pylab.axis([-1, 81, -1, 81])  #描画範囲の指定
   
 
   for i in xrange(C):## 結果の表示
       for k in xrange(N):
           if(listClus[k] == i+1):
               #pylab.scatter(X[k], Y[k], color=color[i], marker=symbol[i], label='data point', s=100)
               pylab.scatter(X[k], Y[k], color=color[i], marker=symbol[i], label='data point', s=100)
               pylab.scatter(X[k][0], X[k][1], color=color[i], marker=symbol[i], s=100)
   for i in xrange(C):
       pylab.scatter(V[i][0], V[i][1], color='k', marker='x', s=150)
   
   #pylab.legend(loc='upper left')  #凡例表示   
   #pylab.savefig('fig-regression.eps')
   pylab.legend(loc='upper left')  #凡例表示   
   pylab.savefig('fig-regression.eps')
   pylab.savefig('fig-hcm-' + fileName + '.eps', format='eps', dpi=600, bbox_inches="tight", pad_inches=0.1)  #出力画像の保存
   
   pylab.show()  #結果の表示
   ##----------------------------------------------
   
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
  • Python

    17413 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • データマイニング

    51 questions

    データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

1 コメント文の訂正により見やすく変更しました

kouk

kouk score 5

2016/10/02 22:10  投稿

データ分類のプログラムの作成が出来ません
###前提・実現したいこと
ここに質問したいことを詳細に書いてください
クラスタリングのプログラムを作成中
与えたデータに対してランダムに代表点を決めその代表点から最も遠い点を計算し
その最も遠い点から決めたデータ数分近いデータを同じグループとして分類するプログラムです
決められたデータ数未満のデータが残った場合そのデータと分けられたそれぞれの代表点との距離を計算し
近い代表点のグループに分類します
全データが分けられた時点で終了とします
###発生している問題・エラーメッセージ
1各点にランダムにクラスタ(グループ)を割り当てる
2クラスタの重心を計算する。
3点のクラスタを、一番近い重心のクラスタに変更する
4変化がなければ終了。変化がある限りは 2. に戻る。
このk-meansと呼ばれるプログラムに現在なっているので 実現したいことの書いたようなプログラムに変更してもらいたいです よろしくお願いします
エラーメッセージ
```
###該当のソースコード
python
ここにご自身が実行したソースコードを書いてください
# coding: utf-8
#Hard c-means(k-means)のプログラム
#モジュールは Python の定義や文が入ったファイル
#SciPyはNumPyを基盤にした科学計算ライブラリ
#matplotlib - NumPyを基盤にしたグラフ描画ライブラリ
#Pandas - データの操作や解析のためのライブラリ
## coding: utf-8
##Hard c-means(k-means)のプログラム
##モジュールは Python の定義や文が入ったファイル
##SciPyはNumPyを基盤にした科学計算ライブラリ
##matplotlib - NumPyを基盤にしたグラフ描画ライブラリ
##Pandas - データの操作や解析のためのライブラリ
import sys ##重要な関数を使える為のimport
import numpy as np ##numpyの関数を使えるようにする関数
import scipy.spatial.distance as dist ##scipyのなんか関数import
from matplotlib import pylab
from matplotlib.font_manager import FontProperties  #matplotlibで日本語を使うための準備
from matplotlib.font_manager import FontProperties  ##matplotlibで日本語を使うための準備
C = 2         #クラスタ数
ROOP = 20     #アルゴリズムの繰り返し回数
objE = 0.0001  #目的関数の収束に使用する定数
#入力するデータファイル
##入力するデータファイル
fileName = "sampleN100C2Labeled" # データ数100、次元数2、クラスタ数2
#fileName = "PolarisLabeled" # データ数51、次元数2、クラスタ数3
#fileName = "CrossC5N125Labeled" # データ数125、次元数2、クラスタ数5
#fileName = "CorelationC5N125Labeled" # データ数125、次元数2、クラスタ数5
##fileName = "PolarisLabeled" # データ数51、次元数2、クラスタ数3
##fileName = "CrossC5N125Labeled" # データ数125、次元数2、クラスタ数5
##fileName = "CorelationC5N125Labeled" # データ数125、次元数2、クラスタ数5
def scale(argX):
   """データ行列Xを属性ごとに正規化したデータを返す"""
   """正規化とは平均0、分散1に変換すること"""
   #次元の数(=列の数)
   ##次元の数(=列の数)
   col = argX.shape[1]
   
   # 次元ごとに平均値と標準偏差を計算
   ## 次元ごとに平均値と標準偏差を計算
   mu = np.mean(argX, axis=0)  #縦の並びがaxis 0, 横の並びがaxis 1
   sigma = np.std(argX, axis=0) #axisなしだと全体の平均
   
   # 次元ごとにデータを正規化
   ## 次元ごとにデータを正規化
   for i in xrange(col):
       argX[:,i] = (argX[:,i] - mu[i]) / sigma[i]
   
   return argX
if __name__ == "__main__":
   # 入力データの格納
   ## 入力データの格納
   data = np.genfromtxt("Data/" + fileName + ".txt")
   
   X = data[:, 0:-1]  #ラベル付きデータを扱う場合にラベルを除去
   #X = data[:, :]
   ##X = data[:, :]
   X = scale(X)
   N = len(X)   # データ数
   P = X.shape[1]
   #print "X = ", X
   #print "Label = ", Label
   ##print "X = ", X
   ##print "Label = ", Label
   print "N = %d, P = %d, C = %d" % (N, P, C)
   Label = data[:, -1]  #Label付きデータを扱う場合に必要
   #print "Label = ", Label
   #RIの結果を保存する配列
   ##print "Label = ", Label
   ##RIの結果を保存する配列
   listRI = []
   np.random.seed()    #乱数の列を固定
   #各個体の所属クラスタ
   ##各個体の所属クラスタ
   listClus = []
   for k in xrange(N): listClus.append( 0 )  #初期化
       
   #目的関数の値の初期化
   ##目的関数の値の初期化
   objVal = sys.maxsize
   #print "objValの初期値", objVal
   #mainループ(Start)---------------------------
   ##mainループ(Start)---------------------------
   numOfRoop = 0
   #Vの初期化(Start)-------------------------------
   ##Vの初期化(Start)-------------------------------
   V = np.zeros( (C, P) )
   #初期Vとなる個体の番号を選択--------------------
   ##初期Vとなる個体の番号を選択--------------------
   initV = np.random.choice(xrange(N), C, replace = False)
   print "初期クラスタ中心となる個体は ", initV
   V = X[ initV ]
   print "Vの初期値は \n", V           
   #Vの初期化(End)-------------------------------
   #非類似度行列Dの初期化(Start)-------------------------------
   ##Vの初期化(End)-------------------------------
   ##非類似度行列Dの初期化(Start)-------------------------------
   D = np.zeros( (N, C) )
   D = dist.cdist(X, V, 'sqeuclidean')  #非類似度にユークリッド距離の自乗を設定
   #print "D = ", D
   #非類似度行列Dの初期化(End)-------------------------------
#ランダムに代表点を設定しデータ間の最大値を計算できない
   #アルゴリズムのループ(Start)-------------------   
   ##print "D = ", D
   ##非類似度行列Dの初期化(End)-------------------------------
##ランダムに代表点を設定しデータ間の最大値を計算できない
   ##アルゴリズムのループ(Start)-------------------   
   while True:
       #帰属度行列Muの更新(Start)-----------------------------
       ##帰属度行列Muの更新(Start)-----------------------------
       Mu = np.zeros( (N, C) )
       for k in xrange(N):
           for i in xrange(C):
               if( D[k][i] == np.min( D[k] ) ):
                   Mu[k][i] = 1
                   break
       #print "Mu = ", Mu
       #帰属度行列Muの更新(End)-------------------------------
       ##print "Mu = ", Mu
       ##帰属度行列Muの更新(End)-------------------------------
               
       #クラスタ中心の行列Vの更新(Start)-------------------------
       ##クラスタ中心の行列Vの更新(Start)-------------------------
       for i in xrange(C):
           vBunshi = 0.0
           vBunbo = np.sum(Mu[:,i], axis=0)
           for k in xrange(N):
               vBunshi += Mu[k][i] * X[k]
           V[i] = vBunshi / vBunbo
       #print "V = ", V
       #クラスタ中心の行列Vの更新(End)---------------------------
       ##print "V = ", V
       ##クラスタ中心の行列Vの更新(End)---------------------------
           
       #非類似度行列Dの更新(Start)-------------------------------
       ##非類似度行列Dの更新(Start)-------------------------------
       D = dist.cdist(X, V, 'sqeuclidean')
       #print "D = ", D
       #非類似度行列Dの更新(End)-------------------------------
       #目的関数の値を更新(Start)-------------------------------
       ##print "D = ", D
       ##非類似度行列Dの更新(End)-------------------------------
       ##目的関数の値を更新(Start)-------------------------------
       newObjVal = np.sum(Mu * D)
       #print "newObjVal = ", newObjVal
       #目的関数の値を更新(End)-------------------------------
#全データをグループ化すると終了
       #ループ回数と目的関数の値を出力
       ##print "newObjVal = ", newObjVal
       ##目的関数の値を更新(End)-------------------------------
       ##ループ回数と目的関数の値を出力(必要なし)
       print "numOfRoop = ", numOfRoop, "\t newObjVal = ", newObjVal
       #目的関数が収束するか、ループ回数が上限に達したら終了
       ##目的関数が収束するか、ループ回数が上限に達したら終了(##全データをグループ化すると終了に変更)
       if numOfRoop == ROOP or np.abs(objVal - newObjVal) < objE :
           break
       #上記以外の場合は目的関数の値とループ回数を更新してアルゴリズムを続行   
       ##上記以外の場合は目的関数の値とループ回数を更新してアルゴリズムを続行   
       else:
           objVal = newObjVal
           numOfRoop += 1
   #所属クラスタの決定(Start)------------------------
   ##所属クラスタの決定(Start)------------------------
   for k in xrange(N):
       for i in xrange(C):
           if( Mu[k][i] == np.max( Mu[k] ) ):
               listClus[k] = i + 1
   #print "listClus = ", listClus
   #所属クラスタの決定(End)--------------------------
   #各クラスタの所属個体数を更新(Start)------------------------
   ##print "listClus = ", listClus
   ##所属クラスタの決定(End)--------------------------
   ##各クラスタの所属個体数を更新(Start)------------------------
       listNumOfClus = []
       for i in xrange(C):
           listNumOfClus.append( np.sum(Mu[:,i], axis=0) )
   #print "listNumOfClus = ", listNumOfClus
   #各クラスタの所属個体数を更新(End)------------------------
   ##print "listNumOfClus = ", listNumOfClus
   ##各クラスタの所属個体数を更新(End)------------------------
 
   print "アルゴリズム終了 ----------"
   print "ループ回数は %d, 目的関数の値は %f" %(numOfRoop, objVal)
   print "N = %d, P = %d, C = %d" % (N, P, C)
   print "各クラスタの個体数 = ", listNumOfClus
   #print "クラスタ中心 = ", V
   #print "帰属度 = ", Mu
   
   
   #----------------------------------------------
   #ファイル出力
   #----------------------------------------------
   #データと所属クラスタの出力
   ##print "クラスタ中心 = ", V
   ##print "帰属度 = ", Mu
   
   
   ##----------------------------------------------
   ##ファイル出力
   ##----------------------------------------------
   ##データと所属クラスタの出力
   outputData = np.zeros( (N, P+1), )
   for k in xrange(N):
       for j in xrange(P+1):
           if(j<P): outputData[k][j] = float(data[k][j])
           else: outputData[k][j] = listClus[k] 
   np.savetxt('outData.txt', outputData, fmt='%.5f')
   
   #Betaの出力
   ##Betaの出力
   np.savetxt('outV.txt', V, fmt='%.5f')
   #Muの出力
   ##Muの出力
   np.savetxt('outMu.txt', Mu, fmt='%.5f')
   #RIの出力
   #np.savetxt('outRI.txt', arrayRI, fmt='%.5f')   
   #----------------------------------------------
   
   
   #----------------------------------------------
   #表示関係
   #----------------------------------------------
   
   #描画範囲の計算
   #minX0 = np.min(X[:,0])
   #maxX0 = np.max(X[:,0])
   #minX1 = np.min(X[:,1])
   #maxX1 = np.max(X[:,1])
   #print "minX0 = %d, maxX0 = %d, minX1 = %d, maxX1 = %d" % (minX0, maxX0, minX1, maxX1)
   
   #日本語テキスト描画の準備
   fp = FontProperties(fname=r'/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf') # IPAフォント
   ##RIの出力
   ##np.savetxt('outRI.txt', arrayRI, fmt='%.5f')   
   ##----------------------------------------------
   
   
   ##----------------------------------------------
   ##表示関係
   ##----------------------------------------------
   
   ##描画範囲の計算
   ##minX0 = np.min(X[:,0])
   ##maxX0 = np.max(X[:,0])
   ##minX1 = np.min(X[:,1])
   ##maxX1 = np.max(X[:,1])
   ##print "minX0 = %d, maxX0 = %d, minX1 = %d, maxX1 = %d" % (minX0, maxX0, minX1, maxX1)
   
   ##日本語テキスト描画の準備
   fp = FontProperties(fname=r'/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf') ## IPAフォント
   color = ['r', 'b', 'g', 'm', 'y', 'c', 'w']  # C < 7と想定
   symbol = ['o', 'x', '+', 's', '*', '^', 'p']
   #図のオプションなど
   ##図のオプションなど
   pylab.figure(figsize=(8,8))  #描画範囲を正方形に変更 デフォルトは(8,6)%%   
   #pylab.xlabel(u'説明変数', fontproperties=fp, fontsize=15)
   #pylab.ylabel(u'目的変数', fontproperties=fp, fontsize=15)
   #pylab.title(u'クラスタリングの結果', fontproperties=fp, fontsize=15)
   ##pylab.xlabel(u'説明変数', fontproperties=fp, fontsize=15)
   ##pylab.ylabel(u'目的変数', fontproperties=fp, fontsize=15)
   ##pylab.title(u'クラスタリングの結果', fontproperties=fp, fontsize=15)
   pylab.grid(True)  #gridの表示
   #pylab.axis([minX0-1, maxX0+1, minX1-1, maxX1+1])  #描画範囲の指定
   #pylab.axis([-3.0, 3.0, -3.0, 3.0])  #描画範囲の指定
   ##pylab.axis([minX0-1, maxX0+1, minX1-1, maxX1+1])  #描画範囲の指定
   ##pylab.axis([-3.0, 3.0, -3.0, 3.0])  #描画範囲の指定
   pylab.axis([-2.5, 2.5, -2.5, 2.5])  #描画範囲の指定
   #pylab.axis([-1, 81, -1, 81])  #描画範囲の指定
   
   #結果の表示
   ##pylab.axis([-1, 81, -1, 81])  #描画範囲の指定
   
   ##結果の表示
   for i in xrange(C):
       for k in xrange(N):
           if(listClus[k] == i+1):
               #pylab.scatter(X[k], Y[k], color=color[i], marker=symbol[i], label='data point', s=100)
               pylab.scatter(X[k][0], X[k][1], color=color[i], marker=symbol[i], s=100)
   for i in xrange(C):
       pylab.scatter(V[i][0], V[i][1], color='k', marker='x', s=150)
   
   #pylab.legend(loc='upper left')  #凡例表示   
   #pylab.savefig('fig-regression.eps')
   pylab.savefig('fig-hcm-' + fileName + '.eps', format='eps', dpi=600, bbox_inches="tight", pad_inches=0.1)  #出力画像の保存
   
   pylab.show()  #結果の表示
   #----------------------------------------------
   ##----------------------------------------------
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
  • Python

    17413 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • データマイニング

    51 questions

    データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る