質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

0回答

1899閲覧

can't multiply sequence by non-int of type 'float'エラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2020/07/23 04:08

編集2020/07/23 08:00

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/07/23 04:17

データとコードがないと回答できません。変更した学習用と評価用のデータとコードを提示ください。 そのさい、データ、コードが大きすぎる場合は、現象が出る最小限の量に削って提示ください。
退会済みユーザー

退会済みユーザー

2020/07/23 04:26

記載しました。お願い致します。
can110

2020/07/23 04:32

インデントがなくなっておりコードが読めません。以下の手順でコードブロックで囲んで提示ください。 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif また、データも画像ではデータの型(文字列か数値か)が分からないので、make_cluster.csvなりをテキストエディタで開いて、その全文字列をコードブロックで囲んで提示ください。
退会済みユーザー

退会済みユーザー

2020/07/23 04:55

すみません。コードブロックは知りませんでした。お願い致します。
can110

2020/07/23 04:59

提示されているデータはmake_cluster.csvでしょうか? コード実行できるよう、他に必要なCSVファイルも同様に提示ください。
can110

2020/07/23 05:16

また、提示されているデータ文字列ですが、read_csvのデフォルト区切り「,」で区切られたデータではないようです。Excelなどのソフトで全選択して貼り付けたデータではないでしょうか? 提示データではread_csvで(,区切りで)正常に読めないので、繰り返しになりますが 「テキストエディタで開いて、その全文字列をコードブロックで囲んで」提示ください。
退会済みユーザー

退会済みユーザー

2020/07/23 08:01

文字数の関係で別質問に記載致します。
can110

2020/07/23 08:05

データが大きすぎる場合は、現象が出る最小限の行、列にデータ(CSV)を削って提示ください。 そのままアップする場合はgithubなどの外部リソースにアップください(こちらのほうが手っ取り速い)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問