前提・実現したいこと
あるアンケートの選択肢3つ(A,B,C)のうち、どれを選んだか、回答者の性別と年齢、その他のデータ、結果何を選んだのかデータがあらかじめあるとき、新しい人が何を選択するのか予想したい。
ID | 性別 | 年齢 | ・・・ | ・・・ | ・・・ | 選択した肢 |
---|---|---|---|---|---|---|
1 | 1 | 31 | Aを選択 | |||
1 | 2 | 46 | Cを選択 | |||
… | ||||||
… | ||||||
455 | 1 | 32 | ? |
試したアプローチ方法
人物のデータの1行ごとに特徴量を出して、新しい人と最も相関している人物の結果を参考にする方法。
つまり、すべての要素をone-hotで表してから、ベクトル(1次元変換)にしてからベクトル相関を求める方法になります。
python
1import numpy as np 2results = np.corrcoef(arr6) 3print("相関係数を出力") 4print(results)
発生している問題・エラーメッセージ
python
1arr4 = [[1.], [1.], [0.], [1.]] 2arr3 = [[1.], [1.], [0.], [0.]]
これらの2次元配列ですと1次元ベクトルではないためエラーになります。
これらの相関係数を知るにはどうしたらよいのでしょうか。
python
1arr4 = [[1.], 1., [0.], [1.,0.]] 2arr3 = [[1.], 1., [0.], [0.,1.]]
また、このようなときに1次元の要素,2次元の要素がある場合の2つのデータの相関を知りたい場合はどのようにすればよいのでしょうか。
試した方法
これらを1次元のベクトルに変換も考えましたが、reshape(-1,)でも変換できませんでした。
そもそも2次元要素をもっていたためです。
他アプローチ
one-hotに拘らず、性別男は1、女は2、趣味が手芸なら1、ボクシングなら2…読書なら72などのように数値に変換してしまえば、1次元のベクトルになるとも考えました。これでベクトルを作り、あとはcorrcoefで比較し出す相関係数は結果参考にするには正しい考え方でしょうか。アドバイスどなたか頂けないでしょうか。よろしくお願い致します。
補足
win10
python3.7
2020/03/21追記(8:11訂正)
ごめんなさい間違えました。1次元には変換はできてもリスト型になってしまって、その後の相関係数を求める際に、リストが入っているのでだめですよと言われてしまうエラーでした。
python
1import numpy as np 2d_float_y = np.array([ 3 [0.],1.,0. 4 ]) 5e_float_y = np.array([ 6 [1.],1.,0. 7 ]) 8print(d_float_y.flatten()) # 1次元に3つあるものを1次元K個にreshapeできる 9print(e_float_y.flatten()) 10arr6 = [] 11import numpy as np 12arr6.append(d_float_y) 13arr6.append(e_float_y) 14print(arr6) 15results = np.corrcoef(arr6) 16print("相関係数を出力") 17print(results)
↓結果
python
1[list([0.0]) 1.0 0.0] 2[list([1.0]) 1.0 0.0] 3[array([list([0.0]), 1.0, 0.0], dtype=object), array([list([1.0]), 1.0, 0.0], dtype=object)] 4--------------------------------------------------------------------------- 5TypeError Traceback (most recent call last) 6<ipython-input-14-97f2f6639cde> in <module>() 7 13 arr6.append(e_float_y) 8 14 print(arr6) 9---> 15 results = np.corrcoef(arr6) 10 16 print("相関係数を出力") 11 17 print(results) 12 13<__array_function__ internals> in corrcoef(*args, **kwargs) 14 153 frames 16<__array_function__ internals> in cov(*args, **kwargs) 17 18<__array_function__ internals> in average(*args, **kwargs) 19 20/usr/local/lib/python3.6/dist-packages/numpy/core/_methods.py in _mean(a, axis, dtype, out, keepdims) 21 149 is_float16_result = True 22 150 23--> 151 ret = umr_sum(arr, axis, dtype, out, keepdims) 24 152 if isinstance(ret, mu.ndarray): 25 153 ret = um.true_divide( 26 27TypeError: can only concatenate list (not "float") to list
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/20 23:18
2020/03/20 23:38
2020/03/20 23:54 編集
2020/03/20 23:52 編集
2020/03/21 00:01 編集