pythonでクラスタリングを行っています。
k-means法で行うのですが,コサイン類似度の計算の際に
can't multiply sequence by non-int of type 'float'
エラーがでてしまいます。
もともとは問題なくできていましたが,
学習用と評価用のデータを変更して,このエラーが出るということはこの学習用と評価用のデータに問題があるかと思いますが,どのようなものかわかる方いらっしゃいましたらお願い致します。
もともとのデータは,学習用:データ数77,次元30,評価用:データ数23,次元30
変更後のデータは,学習用:データ数153,次元30,評価用:データ数51,次元30
小数点のあるデータの値ですが,第何位かまでに設定する必要がありますか。
よろしくお願い致します。
以下コードです。変更したのはPATHの部分と繰り返し回数の部分のみです。
*で上記エラーが出ています。
画像は変更前と変更後の学習用のデータ例です。
python
1 2import pandas as pd 3import numpy as np 4from sklearn.cluster import KMeans 5 6path1 = r'C:\Users\Road01\Desktop\test\kmn\test5\make_cluster.csv' 7path2 = r'C:\Users\Road01\Desktop\test\kmn\test5\vec.csv' 8path3 = r'C:\Users\Road01\Desktop\test\kmn\test5\verification.csv' 9path4 = r'C:\Users\Road01\Desktop\test\kmn\test5\file.txt' 10 11#データの読み込み,ファイル名はクラスタ作成用のcsvファイル 12df9 = pd.read_csv(path1, header = 0, index_col = 0, encoding='shift-JIS') 13 14#N/Aの削除 15df8 =df9.dropna() 16 17vec = KMeans(n_clusters = 3) 18 19#KMeansの実行 20vec.fit(df8) 21 22#クラスタ化したデータに0,1,2の仮ラベル付け,ファイルに書き込み 23with open (path4,'w') as f: 24 print(vec.labels_, file=f) 25 26#重心ベクトルの表示 27print(vec.cluster_centers_) 28 29center = vec.cluster_centers_ 30 31#csvファイルにいったん書き込み,ファイル名は任意 32np.savetxt(path2, center, delimiter=',') 33 34 35def cos_sim(v1, v2): 36 return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) * 37 38#先ほど書き込んだものを読み込む 39df = pd.read_csv(path2,header = None, index_col=None) 40#検証用データを読み込む,ファイル名は検証用のcsvファイル 41df1 = pd.read_csv(path3, header = 0, index_col=0, encoding='shift-JIS') 42 43#繰り返し回数は検証用のデータ数 44i = 0 45while i < 51: 46 df3 = df1.iloc[i] 47 j = 0 48 mylist = [] 49 while j < 3: 50 df2 = df.iloc[j] 51 52 mylist.append(cos_sim(df2, df3)) * 53 j = j + 1 54 else: 55 with open (path4,'a') as f: 56 print(mylist.index(max(mylist)), file=f) 57 print(max(mylist)) #最大の類似度とそのラベルを表示 58 59 i = i + 1 60
あなたの回答
tips
プレビュー