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

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

ただいまの
回答率

88.91%

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 215
退会済みユーザー

退会済みユーザー

pythonでクラスタリングを行っています。
k-means法で行うのですが,コサイン類似度の計算の際に
can't multiply sequence by non-int of type 'float'
エラーがでてしまいます。

もともとは問題なくできていましたが,
学習用と評価用のデータを変更して,このエラーが出るということはこの学習用と評価用のデータに問題があるかと思いますが,どのようなものかわかる方いらっしゃいましたらお願い致します。

もともとのデータは,学習用:データ数77,次元30,評価用:データ数23,次元30
変更後のデータは,学習用:データ数153,次元30,評価用:データ数51,次元30

小数点のあるデータの値ですが,第何位かまでに設定する必要がありますか。

よろしくお願い致します。

以下コードです。変更したのはPATHの部分と繰り返し回数の部分のみです。
*で上記エラーが出ています。
画像は変更前と変更後の学習用のデータ例です。

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans

path1 = r'C:\Users\Road01\Desktop\test\kmn\test5\make_cluster.csv'
path2 = r'C:\Users\Road01\Desktop\test\kmn\test5\vec.csv'
path3 = r'C:\Users\Road01\Desktop\test\kmn\test5\verification.csv'
path4 = r'C:\Users\Road01\Desktop\test\kmn\test5\file.txt'

#データの読み込み,ファイル名はクラスタ作成用のcsvファイル
df9 = pd.read_csv(path1, header = 0, index_col = 0, encoding='shift-JIS') 

#N/Aの削除
df8 =df9.dropna() 

vec = KMeans(n_clusters = 3)

#KMeansの実行
vec.fit(df8) 

#クラスタ化したデータに0,1,2の仮ラベル付け,ファイルに書き込み
with open (path4,'w') as f:
    print(vec.labels_, file=f) 

#重心ベクトルの表示
print(vec.cluster_centers_) 

center = vec.cluster_centers_

#csvファイルにいったん書き込み,ファイル名は任意
np.savetxt(path2, center, delimiter=',') 


def cos_sim(v1, v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) *

#先ほど書き込んだものを読み込む
df = pd.read_csv(path2,header = None, index_col=None) 
#検証用データを読み込む,ファイル名は検証用のcsvファイル
df1 = pd.read_csv(path3, header = 0, index_col=0, encoding='shift-JIS') 

#繰り返し回数は検証用のデータ数
i = 0
while i < 51: 
    df3 = df1.iloc[i]
    j = 0
    mylist = [] 
    while j < 3:
        df2 = df.iloc[j]

        mylist.append(cos_sim(df2, df3)) *
        j = j + 1
    else:
        with open (path4,'a') as f:
            print(mylist.index(max(mylist)), file=f)
        print(max(mylist)) #最大の類似度とそのラベルを表示

    i = i + 1
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • can110

    2020/07/23 14:16

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2020/07/23 17:01

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

    キャンセル

  • can110

    2020/07/23 17:05

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

    キャンセル

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

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る