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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

1922閲覧

類似度を使ったクラスタリング法(1)

Yoshi-5630

総合スコア11

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2017/01/03 09:08

編集2017/01/06 06:06

###前提・実現したいこと
Javaでオントロジクラスタリングに関するシステムを作っています。
類似度を使って要素同士、要素とクラスタ、クラスタとクラスタを比較する機能を実装しています

###発生している問題・エラーメッセージ
下記に示した部分は、要素と要素で類似度の最も高い2つの要素をつなぐ
と言った処理です
次に、クラスタと要素で、「類似度の最も高いクラスタ内の要素を基準としてクラスタと要素をつなぐ」という事とクラスタとクラスタの場合「クラスタに含まれる最上位層に繋がれている要素を比較して類似度の最も高い要素を含む2つのクラスタをつなぐ」ということを実現したいです。

Javaに触れるのが2年ぶりで変数だとか引数の扱いをすっかり忘れてしまい、困っています。

###該当のソースコード

static ArrayList<Integer>[] hardClusteringProc(ArrayList<Integer>[] cluster, double[][] similarity, int elemSize, int currentNum) { int aaa = 0; if (cluster[currentNum].size() > 1 && currentNum * 2 + 1 <= cluster.length) { while (true) { int a_min = 0; int b_min = 0; double sim_min = 1.0d; double sim_max = 0.0d; for (int i = 0; i < cluster[currentNum].size(); i++) { int num1 = cluster[currentNum].get(i); for (int j = 0; j < cluster[currentNum].size(); j++) { int num2 = cluster[currentNum].get(j); if (similarity[num1][num2] < sim_min && num1 != num2) { if (cluster[currentNum * 2].isEmpty() && cluster[currentNum * 2 + 1].isEmpty()) { a_min = num1; b_min = num2; sim_min = similarity[num1][num2]; } else if (!cluster[currentNum * 2].contains(num1) && !cluster[currentNum * 2 + 1].contains(num2)) { a_min = num1; b_min = num2; sim_min = similarity[num1][num2]; } } } if (sim_min == 1.0d) break; String chosen = ""; if (!cluster[currentNum * 2].isEmpty() && !cluster[currentNum * 2 + 1].isEmpty()) { System.out.println("---- Get Minimum Value ----:" + currentNum); System.out.println("[" + a_min + "][" + b_min + "] = " + sim_min); for (int i = 0; i < cluster[currentNum * 2].size(); i++) { int num1 = cluster[currentNum * 2].get(i); if (similarity[num1][a_min] > sim_max && num1 != a_min) { sim_max = similarity[num1][a_min]; chosen = "2n"; } } for (int i = 0; i < cluster[currentNum * 2].size(); i++) { int num1 = cluster[currentNum * 2].get(i); if (similarity[num1][b_min] > sim_max && num1 != b_min) { sim_max = similarity[num1][b_min]; chosen = "2n+1"; } } for (int j = 0; j < cluster[currentNum * 2 + 1].size(); j++) { int num2 = cluster[currentNum * 2 + 1].get(j); if (similarity[num2][a_min] > sim_max && num2 != a_min) { sim_max = similarity[num2][a_min]; chosen = "2n+1"; } } for (int j = 0; j < cluster[currentNum * 2 + 1].size(); j++) { int num2 = cluster[currentNum * 2 + 1].get(j); if (similarity[num2][b_min] > sim_max && num2 != b_min) { sim_max = similarity[num2][b_min]; chosen = "2n"; } } } // if (chosen.equals("2n+1")) { cluster[currentNum * 2].add(b_min); cluster[currentNum * 2 + 1].add(a_min); } else { cluster[currentNum * 2].add(a_min); cluster[currentNum * 2 + 1].add(b_min); } } double sim_max = 0.0d; String chosen = ""; for (int i = 0; i < cluster[currentNum].size(); i++) { int num1 = cluster[currentNum].get(i); if (!cluster[currentNum * 2].contains(num1) && !cluster[currentNum * 2 + 1].contains(num1)) { for (int j = 0; j < cluster[currentNum * 2].size(); j++) { int num2 = cluster[currentNum * 2].get(j); if (similarity[num1][num2] > sim_max && num1 != num2) { sim_max = similarity[num1][num2]; chosen = "2n"; } } for (int j = 0; j < cluster[currentNum * 2 + 1].size(); j++) { int num3 = cluster[currentNum * 2 + 1].get(j); if (similarity[num1][num3] > sim_max && num1 != num3) { sim_max = similarity[num1][num3]; chosen = "2n+1"; } } if (chosen.equals("2n")) { cluster[currentNum * 2].add(num1); } else if (chosen.equals("2n+1")) { cluster[currentNum * 2 + 1].add(num1); } } } // cluster = hardClusteringProc(cluster, similarity, elemSize, currentNum * 2); cluster = hardClusteringProc(cluster, similarity, elemSize, currentNum * 2 + 1); } return cluster; }

###補足情報(言語/FW/ツール等のバージョンなど)
言語:Java

開発環境:Eclipse Neon

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

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

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

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

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

swordone

2017/01/03 09:37

ソースコードは専用のマークダウン記法があるのでそれを使ってください。それと、問題が何なのか今ひとつ分かりかねます。
guest

回答1

0

ベストアンサー

もうひとつの質問と関連しているものと思われますので修正依頼ではなく回答の形で確認していきますが、
最大の問題点は
・「類似度の最も高いクラスタ内の要素を基準としてクラスタと要素をつなぐ」
・「クラスタに含まれる最上位層に繋がれている要素を比較して類似度の最も高い要素を含む2つのクラスタをつなぐ」
という文章が、日本語としてちょっと意味が読み取れないという点です。

いえ、いちゃもんをつけようとしているわけではなく、ここが重要なところで、日本語で整理した形で要件を記述できないということは、まだアイディアとしても要件がまとまりきっていないのではないか、と考えられるです。

ありそうな仕様を勝手に書き下ろして見ますが、

  • 要素とクラスタを総称してノードと呼ぶことにする
  • クラスタは二つのノードからなる
  • ノード間には「類似度」という値が定まる。その定義は、

・要素同士については、あらかじめマトリクスで与えられている
・クラスタと相手ノードの類似度は、クラスタに含まれる二つのノードそれぞれの相手ノードとの類似度のうち、大きい方の値である
で与えられる

  • 初期状態では要素の集合が与えられている
  • これを、後述のルールに沿って変形し、集合中にただ一つのクラスタがある状態がゴールとなる
  • 変形規則は以下の通り

・集合中のノードすべての組み合わせのうち、最も類似度が高い二つを集合から除去する
・除去した二つのノードを抱えるクラスタを作成し、集合に加える

以上は「ありそう」な仕様であって質問文から読み取ったものではありませんのできっと違うと思いますが、このような形で仕様を整理できませんか。

投稿2017/01/05 23:28

yuba

総合スコア5568

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

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

Yoshi-5630

2017/01/06 02:31

なるほどですね! ノードですか、それには気づきませんでした。 正直なところ、12日までにコードを見せなければならないので、どうしようか悩んでいました。 構想は浮かんでも、それを形にできないなんて、言えないですので…
yuba

2017/01/06 04:04

プログラミング自体は1時間もあればまともに動くものができるので、とにかく慌てず仕様をまとめて「まともに」とは何かを定義しましょう。 この“当てずっぽ”仕様は想定しているものとあっていますか、違っていますか? それとも、あっているのか判定できませんか?
Yoshi-5630

2017/01/06 06:03

yuba様 この仕様をじっくり読ませていただきました。 yuba様が汲み取っていただいた想定通りです。 実際、12日までしかタイムリミットがないので、頭がパニクっています。
yuba

2017/01/06 09:08

そしたらプログラムの仕様に移っていきます。 どういう型の入力をもらったらどういう型の結果を返すメソッドにしたいですか? 入力は、doubleの二次元配列で十分。では出力の形式は? これは、この仕事の依頼者とよく話し合う必要があります。結果をどう使いたいかによってどう返すかが決まって来ますので。デスクトップアプリで描画したい? html化してウェブで表示したい? テキスト化してコマンドラインアプリで出力したい? とりあえずデータベースに保存したい? など。
Yoshi-5630

2017/01/08 11:43

yuba様 Eclipse上のコンソールで ---- Result ---- Cluster 1: 30450JPY 0.25_Core 3_Core 5250JPY 29600JPY 9800JPY 79800JPY 945JPY 290000JPY 25000JPY 4.3TB 7800JPY 1/2_Core Biz_Vision_PLUS_Cloud-i_Pro_SLA VS-08 V30LR FujitsuCloudSLA V40WE Pack_8 IaaS: HDD CPU 20 Cluster 2: 8GB(RAM) 262.80USD 65.70USD DaaS 32736JPY 90000JPY 16000JPY 14000JPY 178560JPY 32_Core 14600JPY 9000JPY 10400JPY VD-16 Double_High Standard_Type V10WS Pack_3 V20WE IDC_Frontier: RAM CPU 20 Cluster 3: 8400JPY 11500JPY 357120JPY 137970JPY 7875JPY 3.4GB 30240JPY 62000JPY Pack_9 460000JPY 104904JPY 31000JPY Specification_3 at+link_Case1 Monthly_Usage_Rate Unit_Hosting 19600JPY IaaS_Cloud_Service 20800JPY Memory: Memory 20 Cluster 4: ResponseTime DataProtection Cost DelayTime Continuity SLAService Element UserIndex x86Option SLA Exec WebHosting GHz HDD Option_6 CPU CaaS RAM 50GB Resource_Reservation VM: HDD SLA 21 Cluster 5: 15750JPY 7.5GB 15.0GB 3GB 23100JPY 75000JPY 18600JPY 58032JPY 1.7GB 52000JPY 3650JPY 3750JPY 32000JPY 12GB Type_Dual Cloud_n_SLA V80WE SOD-NEXT_Virtual_Server_Type3 V80WS Industria: Memory 20 Cluster 6: 96000JPY 5200JPY 6_Core 106470JPY 130000JPY 4900JPY 31200JPY 81600JPY 163800JPY 10GB 2.1TB 24000JPY 10_Core Additional_Resources Type_19 Type_18 Internet_Sakura_SLA Type_16 KDDI_Cloud_Server_Service_SLA Japan_Rudd: HDD CPU 20 Cluster 7: 15120JPY 102000JPY 90300JPY 2.4GHz 33000JPY 37000JPY 45000JPY 72000JPY 55600JPY 180000JPY 40000JPY 200GB 6GB SOD-NEXT_Virtual_Server_Type2 VMware_Server Spec_Type11 Pack_5 V60LR Option_7 Server_On-demand__NEXT Bit_Isle: Memory GHz HDD 21 Cluster 8: 17000JPY 450000JPY 1.5GB 1980JPY 256MB 8.6TB 1.5_Core 41000JPY 55000JPY 22500JPY 15000JPY 8000JPY Type_A V120LR V60LC V15LC V20WS VS-16 V30LC V15LR: Memory HDD CPU 20 Cluster 9: Medium 35070JPY 64500JPY 91927.5JPY 24GB 14500JPY 2GB(RAM) 3000JPY 41500JPY 38850JPY 48300JPY at+link_Case6 300000JPY Standard_Small_(HP) VD-08 40GB Type_15 Type_3 at+link_Case2 KDDI_Cloud_Server_Service: Memory RAM HDD 20 Cluster 10: Hourly_Usage_Rate 1.83USD 1.44USD 0.72USD 0.56USD 1GB(RAM) 7560JPY 768MB 4GB(RAM) Share_core 900GB 32.85USD Small V240LC GOGRID_Cloud Quad_High at+link_Case4 Option_3 Type_C FUJITSUCloudInitiative FUJITSU: Memory RAM HDD CPU Hourly_Usage_Rate 21 Cluster 11: 2400JPY 7300JPY 2980JPY 512MB 2.6GHz 80000JPY 114000JPY 123480JPY 13335JPY 132000JPY 21000JPY 30000JPY 30GB 47000JPY Specification_2 Specification_7 V40WS Specification_1 Specification_6 Specification_5: Memory GHz HDD 20 Cluster 12: FileSystem NetworkBandwidth 2018GB No_Resource_Reservation Copper_2 Silver_2 10000JPY 0.8GHz 120000JPY 66528JPY 18144JPY 5300JPY 38000JPY 24_Core V10WE V240LR ITOCHU_Techno-Solutions_SLA White_Cloud_Virtual_Server Softbank_Telecom Specification_4: GHz HDD CPU 20 Cluster 13: 1.35USD 1.80USD 72.5JPY 0.45USD Standard_XL Bronze_1 IBM_SmarterCloud_Enterprise Amazon IBM Plan_v1 100GB at+link_Cloud_SLA Advanced_Type Type_Half Economy_Type High_Performance_Type NiftyCloudSLA Standard Unit_Hosting_Cloud ITOCHU_Techno-Solutions: HDD Hourly_Usage_Rate 20 Cluster 14: 1GHz 3780JPY 29400JPY 5000JPY 20000JPY 3GHz Type_B Pack_1 at+link_Case5 20GB Pack_7 Pack_6 Type_L3 Option_4 Type_8 Option_2 Type_1 Pack_2 Spec_Type1 Cloudage_CUVIC_OnDemand: GHz HDD 20 Cluster 15: SorageInterface StorageSpace NetworkLatency MobileDeviceSupport Computing_Resource BatchProcessing ApplicationServers Lib ApplicationEnvironment VideoEncodingStreaming Interno Windows7 WindowsVista PlanQ WindowsMobile Realtime Sun Mobile MaxOS InfraSoftware: OS 20 Cluster 16: MobileLinux EmbeddedLinux WindowsServer2003 Android WindowsMg PalmOS WindowsServer2008 IbmAIX6.1 Windows2000 Windows05 Windows98 Linux WindowsCE iPhoneOS Unix WindowsXP Windows Embedded IBMPowerSystemsOS OS: OS 20 Cluster 17: Windows_Server_Enterprise_Edition 16.43USD 400GB 25GB 800GB 209.0JPY 525.60USD 1200GB 0.5GB(RAM) 788.40USD Ubuntu S 60GB 64bit X-Small X-Large AmazonEC2SLA XXX-Large 28.4JPY 23.1JPY: RAM OS HDD Hourly_Usage_Rate 20 Cluster 18: 15GB(RAM) 2GB 8.9JPY 66.2JPY 0.12USD HP_Cloud_Compute_SLA 1.25GHz Yes_Resource_Reservation 1084GB 235GB 410GB 16_Core Standard_4XL High_Memory_XL 910GB Silver_1 Platinum_2 IBM_SLA HP GOGRID: Memory RAM GHz HDD CPU Hourly_Usage_Rate 20 Cluster 19: 131.40USD 24GB(RAM) 32bit 16GB(RAM) XX-Large Large GOGRID_SLA Bronze_4 Gold_4 Silver_4 O_Medium_Linux/UNIX S_Medium_Linux/UNIX S_Medium_Windows Standard_On-Demand_Instances AmazonElasticComputeCloud 153.3JPY 9.3JPY 24.2JPY 34.7JPY 20.5JPY: RAM Hourly_Usage_Rate 20 Cluster 20: 0.092USD 0.07USD 0.184USD 0.230USD 0.017USD 0.115USD 0.035USD Amazon_Linux_AMI Debian O_Small_Linux/UNIX S_Small_Windows O_Medium_Windows O_Small_Windows S_Small_Linux/UNIX 50.4JPY Standard_Spot_Instances 77.7JPY 13.1JPY 26.3JPY 31.5JPY 10.5JPY: OS Hourly_Usage_Rate 21 Cluster 21: 1800GB 120GB(RAM) 30GB(RAM) Bronze_2 7GB Standard_2XL Standard_Large(HP) Standard_Extra_Small L 7.4JPY 6.2JPY 68.3JPY 47.3JPY 74.6JPY 146.0JPY 11.0JPY 14.2JPY 17.3JPY 12.1JPY 10.0JPY: Memory RAM HDD Hourly_Usage_Rate 20 Cluster 22: 1GB 14GB 1.75GB 0.20USD Standard_Medium(HP) 3.5GB XL M HP_Cloud_Compute 1.06USD 1.96USD 0.84USD 3.40USD 0.34USD 0.58USD 1.51USD 0.52USD XS 18.9JPY 35.7JPY: Memory Hourly_Usage_Rate 20 Cluster 23: Copper_4 Gold_2 Copper_3 Gold_1 Copper_1 Gold_3 Platinum_1 Bronze_3 Silver_3 4_Core 4.1JPY 143.9JPY Standard_8XL 33.6JPY 3.24USD 0.68USD 0.90USD 5.3JPY 32.6JPY High_Memory_2XL: CPU Hourly_Usage_Rate 20 Cluster 24: 0.18USD 2.22USD 1.08USD 3.57USD 0.09USD 570GB 60GB(RAM) 160GB Windows_Any 21.0JPY SUSE_Linux_Enterprise_Server SuSE_Linux High_Memory_Large 45.2JPY 0.24USD 36.8JPY 16.8JPY 0.36USD 0.03USD 0.06USD Linux_Any: RAM OS HDD Hourly_Usage_Rate 21 Cluster 25: 25410JPY 75.6JPY 37.8JPY 15.2JPY V120LC 149835JPY Spec_Type6 Spec_Type9 Spec_Type14 IIJ_GIO_Component_Nation_Service Spec_Type13 Spec_Type3 Spec_Type2 Spec_Type8 Spec_Type17 Internet_Initiative NIFTY DomesticProvider 4GB Cloud_Self_Type: Memory Hourly_Usage_Rate 20 Cluster 26: 28000JPY Industria_SLA at+link_Case7 Plan_v4 6.7JPY 84000JPY 60900JPY 1.6GHz 13600JPY 21.5JPY Type_S Type_L Type_XL2 Type_S2 Type_L2 57.8JPY Type_XL 22.1JPY 38.9JPY RedHatEnterpriseLinux: GHz OS Hourly_Usage_Rate 20 Cluster 27: 96GB 48GB 64000JPY 98.5percent 99.5percent SOD-NXET_Virtual_Server_Type1 Spec_Type7 Spec_Type10 Spec_Type5 Plan_vQ Pack_11 Option_1 Plan_v2 KDDI GMO_Cloud_Public 15.8JPY GMO_Cloud 52.5JPY 131.3JPY 42.0JPY: Memory Hourly_Usage_Rate 20 Cluster 28: Windows_Azure_SLA Windows_Azure Microsoft 300GB Type_Triple 8_Core Option_5 Type_M2 Type_Single NO_SAL_Goal Server_On-demand_NEXT_SLA Plan_v8 OverseasProvider Windows_Server_Standard_Edition Cloud_n NTTCommunications 25.2JPY 100.8JPY 7.9JPY 12.6JPY WindowsServer2012: OS HDD CPU Hourly_Usage_Rate 21 Cluster 29: 5_Core 15600JPY 52800JPY 128GB at+link_Case3 FreeBSD Type_Quad 99.95percent Type_6 Type_5 12_Core Type_4 Type_14 Type_9 Type_13 Type_20 Type_12 Type_2 Type_17 Type_11: Memory OS CPU 20 Cluster 30: 99percent Agreement 99.9999percent 99.999percent 100percent 99.7percent 99.99percent Option_8 99.9percent Availability Spec_Type16 VMware_Server_Lite Pack_12 Spec_Type4 Pack_10 NiftyCloud at+link_Cloud at+link CEC Type_10: 20 Cluster 31: 5GB Pack_13 Type_L4 Spec_Type15 Type_21 Cloud_Self_Type_SLA Type_XS Pack_4 Type_M Type_7 Spec_Type12 GMO_Cloud_Public_SLA Biz_Vision_PLUS_Colud-i_Pro Internet_Sakura Sakura_Internet 16GB 8GB 2_Core High_Performance_Extra_Large High_Performance: Memory CPU 20 Cluster 32: 8800JPY 35GB 1300JPY 39000JPY 98000JPY 64GB 390JPY 4500JPY 2500JPY 0.5GB 80GB Standard_Medium 32GB High_Performance_Small High_Performance_Large 1_Core Standard_Large High_Performance_Medium Standard_Entry Standard_Small CentOS: Memory OS HDD CPU 21 に表示したいです。 ※じつは、クラスタと要素の比較は配列内比較で、クラスタ内の最大値をとれればよいのではと考えたのですが、いかがでしょうか?
yuba

2017/01/09 03:08

ごめんなさい、出力テキストを見せられてもどのような仕様にしたいのかは読み取れません。 > クラスタと要素の比較は配列内比較で、クラスタ内の最大値をとれればよいのでは これだけではよく意味がわからないのでなんとも言えないです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問