Source code Fuzzy C Means Clustering
FuzzyCMeansFrame.java
|
/*
* FuzzyCMeanFrame.java
*
* Created on January 18, 2006, 10:29 PM
*/
package fuzzycmeans;
import
com.birosoft.liquid.LiquidLookAndFeel;
import java.sql.SQLException;
import java.util.Random;
import javax.swing.JOptionPane;
import
javax.swing.table.DefaultTableModel;
/**
*
*
*/
public class FuzzyCMeanFrame extends javax.swing.JFrame
{
int data[] = null;
FuzzyCMeansEngine fcm = null;
boolean finish = false;
// private PersentaseFrame pf;
private MbfFrame mf;
private markerFrame mr;
private hariFrame hr;
private chartFrame cf;
double[] datadb = null;
public FuzzyCMeanFrame() {
initComponents();
// while(!fcm.compute());
//
// double [] ctr =
fcm.getClusterCentroid();
//
panelGrafik2D1.setClusterCentroid(ctr);
// panelGrafik2D1.setmbrFunc(fcm.getMembershipFunction());
//
// for(int i=0;i<ctr.length;i++)
// System.out.println(ctr[i]);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="
Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jButtonGenerate = new javax.swing.JButton();
jTextFieldPrecision = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextFieldJmlCluster = new javax.swing.JTextField();
jTextFieldFuzziness = new javax.swing.JTextField();
jButtonStep = new javax.swing.JButton();
jButtonRun = new javax.swing.JButton();
jLabelStep = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jcbIndex = new javax.swing.JComboBox();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jPanel3 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
rbMbf = new javax.swing.JRadioButton();
rbIhsg = new javax.swing.JRadioButton();
rbMarker = new javax.swing.JRadioButton();
rbHari = new javax.swing.JRadioButton();
jPanel4 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jPanel5 = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
jTable3 = new javax.swing.JTable();
getContentPane().setLayout(null);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Fuzzy C-Means Program");
setResizable(false);
jPanel1.setLayout(null);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Input Parameter",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 0, 12)));
jPanel1.setForeground(new java.awt.Color(255, 0, 0));
jPanel1.setFont(new
java.awt.Font("Times New Roman", 0, 12));
jLabel2.setFont(new java.awt.Font("Times New Roman", 0,
12));
jLabel2.setText("Batas Ketelitian");
jPanel1.add(jLabel2);
jLabel2.setBounds(180, 60, 90, 20);
jLabel3.setFont(new java.awt.Font("Times New Roman", 0,
12));
jLabel3.setText("Fuzziness (m)");
jPanel1.add(jLabel3);
jLabel3.setBounds(10, 90, 80, 20);
jButtonGenerate.setFont(new java.awt.Font("Times New Roman",
0, 12));
jButtonGenerate.setText("Generate");
jButtonGenerate.addActionListener(new java.awt.event.ActionListener()
{
public void
actionPerformed(java.awt.event.ActionEvent evt) {
jButtonGenerateActionPerformed(evt);
}
});
jPanel1.add(jButtonGenerate);
jButtonGenerate.setBounds(10, 120, 110, 23);
jTextFieldPrecision.setText("0.03");
jPanel1.add(jTextFieldPrecision);
jTextFieldPrecision.setBounds(290, 60, 50, 20);
jLabel4.setFont(new java.awt.Font("Times New Roman", 0,
12));
jLabel4.setText("Jumlah Cluster");
jPanel1.add(jLabel4);
jLabel4.setBounds(10, 60, 80, 20);
jTextFieldJmlCluster.setText("6");
jPanel1.add(jTextFieldJmlCluster);
jTextFieldJmlCluster.setBounds(100, 60, 50, 20);
jTextFieldFuzziness.setText("2");
jPanel1.add(jTextFieldFuzziness);
jTextFieldFuzziness.setBounds(100, 90, 50, 20);
jButtonStep.setFont(new java.awt.Font("Times New Roman", 0,
12));
jButtonStep.setText("Step By Step");
jButtonStep.setEnabled(false);
jButtonStep.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jButtonStepActionPerformed(evt);
}
});
jPanel1.add(jButtonStep);
jButtonStep.setBounds(130, 120, 110, 23);
jButtonRun.setFont(new java.awt.Font("Times New Roman", 0,
12));
jButtonRun.setText("Run");
jButtonRun.setEnabled(false);
jButtonRun.addActionListener(new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
jButtonRunActionPerformed(evt);
}
});
jPanel1.add(jButtonRun);
jButtonRun.setBounds(10, 150, 110, 23);
jLabelStep.setFont(new java.awt.Font("Times New Roman", 0,
12));
jLabelStep.setText("Step :");
jPanel1.add(jLabelStep);
jLabelStep.setBounds(250, 120, 110, 20);
jLabel1.setText("Nama Index");
jPanel1.add(jLabel1);
jLabel1.setBounds(10, 20, 80, 20);
jcbIndex.setFont(new java.awt.Font("Times New Roman", 0,
12));
jcbIndex.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
"Composite Index", "Miscellanous Industry ",
"Infrastructure", "Jakarta Islamic Index", "Agriculture
", "Consumer Goods ", "Main Board Index ",
"Manufacture ", "Basic Industry", "Finance ",
"Trade & Service ", "Property", "LQ45 ",
"Mining ", "Development Board Index" }));
jPanel1.add(jcbIndex);
jcbIndex.setBounds(100, 20, 240, 22);
getContentPane().add(jPanel1);
jPanel1.setBounds(10, 80, 370, 190);
jLabel5.setFont(new java.awt.Font("Times New Roman", 1,
14));
jLabel5.setForeground(new java.awt.Color(204, 0, 0));
jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel5.setText("Fuzzy C - Means Clustering ");
getContentPane().add(jLabel5);
jLabel5.setBounds(220, 10, 300, 20);
jLabel6.setFont(new java.awt.Font("Times New Roman", 1,
14));
jLabel6.setForeground(new java.awt.Color(204, 0, 0));
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel6.setText("Indek Harga Saham Gabungan Bursa Efek Jakarta
2005");
getContentPane().add(jLabel6);
jLabel6.setBounds(160, 40, 440, 20);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Fuzzy C Means :: Clustered IHSG Data",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 0, 12)));
jPanel2.setForeground(new java.awt.Color(255, 0, 0));
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1",
"Title 2", "Title 3", "Title 4"
}
) {
boolean[] canEdit = new boolean
[] {
false, false, false, false
};
public boolean isCellEditable(int
rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);
org.jdesktop.layout.GroupLayout jPanel2Layout = new
org.jdesktop.layout.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane1,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup()
.add(jScrollPane1,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addContainerGap())
);
getContentPane().add(jPanel2);
jPanel2.setBounds(390, 280, 320, 330);
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Grafik dan Data",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Times
New Roman", 0, 12)));
jPanel3.setForeground(new java.awt.Color(255, 0, 0));
jPanel3.setFont(new java.awt.Font("Times New Roman", 0,
12));
jButton1.setText("Open");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
rbMbf.setText("Derajat Keanggotaan");
rbMbf.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0,
0));
rbMbf.setMargin(new java.awt.Insets(0, 0, 0, 0));
rbIhsg.setText("Grafik IHSG");
rbIhsg.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0,
0));
rbIhsg.setMargin(new java.awt.Insets(0, 0, 0, 0));
rbMarker.setText("Data Tercluster");
rbMarker.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0,
0, 0));
rbMarker.setMargin(new java.awt.Insets(0, 0, 0, 0));
rbHari.setText("Detail Data Tersortir");
rbHari.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0,
0));
rbHari.setMargin(new java.awt.Insets(0, 0, 0, 0));
org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel3Layout.createSequentialGroup()
.add(jButton1,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 192,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.add(jPanel3Layout.createSequentialGroup()
.add(rbMbf,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 155,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(143,
Short.MAX_VALUE))
.add(jPanel3Layout.createSequentialGroup()
.add(rbIhsg,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE)
.add(168, 168, 168))
.add(jPanel3Layout.createSequentialGroup()
.add(rbMarker)
.addContainerGap(207,
Short.MAX_VALUE))
.add(jPanel3Layout.createSequentialGroup()
.add(rbHari,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addContainerGap())))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel3Layout.createSequentialGroup()
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.add(rbIhsg)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(rbMbf)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(rbMarker)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(rbHari)
.add(41, 41, 41)
.add(jButton1)
.addContainerGap())
);
getContentPane().add(jPanel3);
jPanel3.setBounds(390, 80, 320, 190);
jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"FCM :: Cluster Centroid", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 0, 12)));
jPanel4.setForeground(new java.awt.Color(255, 0, 0));
jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title
2", "Title 3", "Title 4"
}
) {
boolean[] canEdit = new boolean
[] {
false, false, false, false
};
public boolean isCellEditable(int
rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane2.setViewportView(jTable2);
org.jdesktop.layout.GroupLayout jPanel4Layout = new
org.jdesktop.layout.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane2,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel4Layout.createSequentialGroup()
.add(jScrollPane2,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addContainerGap())
);
getContentPane().add(jPanel4);
jPanel4.setBounds(200, 280, 180, 330);
jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"FCM : u0 - u1",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 0, 12)));
jPanel5.setForeground(new java.awt.Color(255, 0, 0));
jTable3.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1",
"Title 2", "Title 3", "Title 4"
}
) {
boolean[] canEdit = new boolean
[] {
false, false, false, false
};
public boolean isCellEditable(int
rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane3.setViewportView(jTable3);
org.jdesktop.layout.GroupLayout jPanel5Layout = new
org.jdesktop.layout.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane3,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel5Layout.createSequentialGroup()
.add(jScrollPane3,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addContainerGap())
);
getContentPane().add(jPanel5);
jPanel5.setBounds(10, 280, 190, 330);
java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-733)/2, (screenSize.height-656)/2, 733,
656);
}// </editor-fold>//GEN-END:initComponents
//menerima pilihan sesuai radiobutton yang di klik pengguna
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_jButton1ActionPerformed
if(rbMbf.isSelected()){
mf.setVisible(true);
}
if(rbIhsg.isSelected()){
cf.setVisible(true);
}
if(rbMarker.isSelected()){
mr.setVisible(true);
}
if(rbHari.isSelected()){
hr.setVisible(true);
}
// TODO add your handling code here:
}//GEN-LAST:event_jButton1ActionPerformed
//melakukan klasterisasi
private void jButtonRunActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_jButtonRunActionPerformed
//melakukan komputasi untuk mencari centroid dan updating membership
masing-masing data IHSG
while(!finish)
finish = fcm.compute();
//menulis jumlah langkah terakhir komputasi dari pengklasteran IHSG
jLabelStep.setText("Step : " + fcm.getStep() + "
Finished");
//Menuliskan centroid masing-masing cluster pada table
String jdlCentroid[]=new String[]{" Cluster ","
Centroid "};
double[] centroid=fcm.getClusterCentroid();
Object[][] centroidTable=new Object[fcm.getClusterCentroid().length][2];
for(int h=0;h<centroidTable.length;h++){
centroidTable[h][0]=h;
centroidTable[h][1]=centroid[h];
}
DefaultTableModel modelCentroid=new
DefaultTableModel(centroidTable,jdlCentroid);
jTable2.setModel(modelCentroid);
ConnectDbFix cf=new ConnectDbFix();
//Menuliskan data tercluster
pada table
String jdlhasil[] = new String[]{"No",
"Cluster","Data","Membership","Tanggal","Hari"};
try {
Object[][] x =
fcm.getDataCluster5(cf.getDatatanggal(),cf.getDataHari());
Object[][] y = new
Object[fcm.getData().length][6];
int h=1;
for(int m=0; m<238; m++) {
y[m][0] = h;
y[m][1] = x[m][0];
y[m][2] = x[m][1];
y[m][3]= x[m][2];
y[m][4]= x[m][3];
y[m][5]= x[m][4];
h++;
}
DefaultTableModel modelnya
= new DefaultTableModel(y,jdlhasil);
jTable1.setModel(modelnya);
mr=new
markerFrame(String.valueOf(jcbIndex.getSelectedItem()),y,centroid);
hr=new
hariFrame(String.valueOf(jcbIndex.getSelectedItem()),y,Integer.parseInt(jTextFieldJmlCluster.getText()));
//af=new
akurasiFrame(datadb,Integer.parseInt(jTextFieldJmlCluster.getText()),Integer.parseInt(jTextFieldFuzziness.getText()),
Double.parseDouble(jTextFieldPrecision.getText()),fcm.getDataCluster2());
} catch (SQLException ex) {
ex.printStackTrace();
}
mf=new
MbfFrame((String)(jcbIndex.getSelectedItem()),fcm.getMembershipFunction(),fcm.getData(),(double)Integer.parseInt(jTextFieldJmlCluster.getText()));
}//GEN-LAST:event_jButtonRunActionPerformed
//melakukan klasterisasi secara perlangkah
private void jButtonStepActionPerformed(java.awt.event.ActionEvent
evt) {//GEN-FIRST:event_jButtonStepActionPerformed
//melakukan komputasi langkah per langkah
if(!finish) {
finish = fcm.compute();
jLabelStep.setText("Step :
" + fcm.getStep());
//melakukan penulisan centroid
pada table
String jdlCentroid[]=new
String[]{" Cluster "," Centroid "};
double[]
centroid=fcm.getClusterCentroid();
Object[][] centroidTable=new
Object[fcm.getClusterCentroid().length][2];
for(int
h=0;h<centroidTable.length;h++){
centroidTable[h][0]=h;
centroidTable[h][1]=centroid[h];
}
DefaultTableModel
modelCentroid=new DefaultTableModel(centroidTable,jdlCentroid);
jTable2.setModel(modelCentroid);
//Menuliskan data tercluster pada table
String jdlhasil[] = new
String[]{"No",
"Cluster","Data","Membership","Tanggal","Hari"};
ConnectDbFix cf=new
ConnectDbFix();
try {
Object[][] x =
fcm.getDataCluster5(cf.getDatatanggal(),cf.getDataHari());
Object[][] y = new
Object[fcm.getData().length][6];
int h=1;
for(int m=0; m<238; m++) {
y[m][0] = h;
y[m][1] = x[m][0];
y[m][2] = x[m][1];
y[m][3]= x[m][2];
y[m][4]= x[m][3];
y[m][5]= x[m][4];
h++;
}
DefaultTableModel modelnya =
new DefaultTableModel(y,jdlhasil);
jTable1.setModel(modelnya);
mr=new
markerFrame(String.valueOf(jcbIndex.getSelectedItem()),y,centroid);
} catch (SQLException ex) {
ex.printStackTrace();
}
mf=new MbfFrame((String)(jcbIndex.getSelectedItem()),fcm.getMembershipFunction(),fcm.getData(),(double)Integer.parseInt(jTextFieldJmlCluster.getText()));
} else
jLabelStep.setText("Step :
" + fcm.getStep() + " Finished" );
}//GEN-LAST:event_jButtonStepActionPerformed
//melakukan generate dari data input dari pengguna
private void jButtonGenerateActionPerformed(java.awt.event.ActionEvent
evt) {//GEN-FIRST:event_jButtonGenerateActionPerformed
ConnectDbFix con=new ConnectDbFix();
cf=new chartFrame((String)(jcbIndex.getSelectedItem()));
if(String.valueOf(jcbIndex.getSelectedItem())=="Composite
Index")
datadb=con.getDataComposite();
if(String.valueOf(jcbIndex.getSelectedItem())=="Miscellanous
Industry ")
datadb=con.getDataMiscell();
if(String.valueOf(jcbIndex.getSelectedItem())=="Mining ")
datadb=con.getDataMining();
if(String.valueOf(jcbIndex.getSelectedItem())=="Infrastructure")
datadb=con.getDataInfra();
if(String.valueOf(jcbIndex.getSelectedItem())=="Jakarta Islamic
Index")
datadb=con.getDataIslam();
if(String.valueOf(jcbIndex.getSelectedItem())=="Agriculture
")
datadb=con.getDataAgri();
if(String.valueOf(jcbIndex.getSelectedItem())=="Consumer Goods
")
datadb=con.getDataConsumer();
if(String.valueOf(jcbIndex.getSelectedItem())=="Main Board Index
")
datadb=con.getDataMain();
if(String.valueOf(jcbIndex.getSelectedItem())=="Manufacture
")
datadb=con.getDataManuf();
if(String.valueOf(jcbIndex.getSelectedItem())=="Basic
Industry")
datadb=con.getDataBasic();
if(String.valueOf(jcbIndex.getSelectedItem())=="Finance ")
datadb=con.getDataFinance();
if(String.valueOf(jcbIndex.getSelectedItem())=="Trade &
Service ")
datadb=con.getDataTrade();
if(String.valueOf(jcbIndex.getSelectedItem())=="Property")
datadb=con.getDataProperty();
if(String.valueOf(jcbIndex.getSelectedItem())=="LQ45 ")
datadb=con.getDataLQ();
if(String.valueOf(jcbIndex.getSelectedItem())=="Development Board
Index")
datadb=con.getDataDevelop();
// Persyaratan Inputan
if(Integer.parseInt(jTextFieldJmlCluster.getText())<2){
JOptionPane.showMessageDialog(null, " Cluster Number < 2
", " Cluster Number ", JOptionPane.ERROR_MESSAGE
);
} else
if((Double.parseDouble(jTextFieldPrecision.getText())<=0)&&(Double.parseDouble(jTextFieldPrecision.getText())>=1))
JOptionPane.showMessageDialog(null, " 0 < e < 1 ",
" Terminal Criterion ", JOptionPane.ERROR_MESSAGE
);
else if((Integer.parseInt(jTextFieldFuzziness.getText()))<=1){
JOptionPane.showMessageDialog(null, " 1 <= m < Unlimited
", " Fuzziness ", JOptionPane.ERROR_MESSAGE
);
} else{
fcm = new FuzzyCMeansEngine(datadb,
Integer.parseInt(jTextFieldJmlCluster.getText()),
Integer.parseInt(jTextFieldFuzziness.getText()),
Double.parseDouble(jTextFieldPrecision.getText())
);
finish = false;
}
//Menuliskan nilai U0 dan
U1 pada table
String[] jdlU=new String[]{"no","u0","
u1"};
double[][] isiU0=fcm.getDataU0();
double[][] isiU1=fcm.getDataU1();
Object[][] u0Table=new Object[fcm.getDataU0().length][3];
for(int e=0;e<u0Table.length;e++){
for(int
j=0;j<u0Table[e].length;j++){
u0Table[e][0]=e+j+1-2;
u0Table[e][1]=isiU0[e][j];
u0Table[e][2]=isiU1[e][j];
}
}
DefaultTableModel modelU=new
DefaultTableModel(u0Table,jdlU);
jTable3.setModel(modelU);
jButtonStep.setEnabled(true);
jButtonRun.setEnabled(true);
}//GEN-LAST:event_jButtonGenerateActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try{
LiquidLookAndFeel ll =new
LiquidLookAndFeel();
//ll.setPanelTransparency(false);
javax.swing.UIManager.setLookAndFeel(ll);
} catch(Exception e){
e.printStackTrace();
}
new
FuzzyCMeanFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButtonGenerate;
private javax.swing.JButton jButtonRun;
private javax.swing.JButton jButtonStep;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabelStep;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
private javax.swing.JTable jTable3;
private javax.swing.JTextField jTextFieldFuzziness;
private javax.swing.JTextField jTextFieldJmlCluster;
private javax.swing.JTextField jTextFieldPrecision;
private javax.swing.JComboBox jcbIndex;
private javax.swing.JRadioButton rbHari;
private javax.swing.JRadioButton rbIhsg;
private javax.swing.JRadioButton rbMarker;
private javax.swing.JRadioButton rbMbf;
// End of variables declaration//GEN-END:variables
// Double hasil[][] = new
Double[300][10];
// private InputTable
modelhasil = new InputTable(hasil);
}
|
FuzzyCMeansEngine.java
|
/*
* FuzzyCMeansEngine.java
*
* Created on January 18, 2006, 6:30 PM
*
* To change this template, choose Tools |
Options and locate the template under
* the Source Creation and Management node.
Right-click the template and choose
* Open. You can then make changes to the
template in the Source Editor.
*/
package fuzzycmeans;
import java.util.Random;
import
oracle.jdbc.pool.OracleDataSource;
import oracle.jdbc.*;
import java.sql.*;
/**
*
*
*/
public class FuzzyCMeansEngine {
private int m=2;
private double datum[];
private double clustercentroid[];
private double u1[][];
private double u0[][];
private int datumlength=0;
private int clustercount=0;
private int step=0;
private double error=0.3;
private boolean finish=false;
private Double[][] dataSample;
//konstruktor
public FuzzyCMeansEngine(double[] datum, int clustercount, int m,
double error) {
this.m = m;
this.datum = datum;
this.clustercount = clustercount;
this.datumlength = datum.length;
this.error = error;
initialize();
}
private void initialize() {
Random random = new Random();
int i=0;
clustercentroid = new double[clustercount];
u0 = new double[datumlength][clustercount];
u1 = new double[datumlength][clustercount];
for(i=0;i<datumlength;i++)
for(int
j=0;j<clustercount;j++)
u0[i][j] = u1[i][j] = random.nextDouble();
}
//menghitung centroid
private void computecentroid() {
double val1=0;
double val2=0;
for(int i=0;i<clustercount;i++){
val1=0;
val2=0;
for(int
j=0;j<datumlength;j++){
val1+=Math.pow(u0[j][i], m
)*datum[j];
val2+=Math.pow(u0[j][i], m );
}
clustercentroid[i]=val1/val2;
}
}
//menghitung membership tiap data per cluster
private void computemembership() {
double val1=0;
for(int i=0;i<datumlength;i++){
for(int
j=0;j<clustercount;j++){
val1=0;
for(int
k=0;k<clustercount;k++) {
val1+=Math.pow(Math.abs(datum[i]-clustercentroid[j])/Math.abs(datum[i]-clustercentroid[k]),
2/(m-1));
}
u1[i][j]=1/val1;
}
}
}
//mengklaster data
public boolean compute() {
if(!finish){
step++;
computecentroid();
computemembership();
checkStep();
for(int i=0;i<datumlength;i++)
for(int
j=0;j<clustercount;j++)
u0[i][j] = u1[i][j];
}
return finish;
}
//menghitung langkah dalam pengklasteran
private void checkStep() {
boolean stop=true;
for(int i=0;i<datumlength;i++)
for(int
j=0;j<clustercount;j++)
if(Math.abs(u0[i][j]-u1[i][j])>=error)
stop=false;
this.finish = stop;
}
public double[][] getMembershipFunction() {
return u1;
}
//mendapatkan data centroid dari cluster
public double[] getClusterCentroid() {
return clustercentroid;
}
//mendapatkan jumlah langkah dari klasterisasi
public int getStep() {
return step;
}
//mendapatkan data asli
public double[] getData(){
return datum;
}
//mendapatkan U0
public double[][] getDataU0(){
return u0;
}
//mendapatkan U1
public double[][] getDataU1(){
return u1;
}
//mendapatkan index dari klaster yang nilai membershipnya paling
maksimal
public int[] getClusterIndex(){
int j;
double max;
int index = 0;
int hasilIndex[] = new int[datumlength];
int i=0;
for(i=0;i<datumlength;i++){
max=0.0;
for(j=0;j<clustercount;j++){
if(max<u1[i][j]){
max=u1[i][j];
index=j;
}
}
hasilIndex[i]=index;
}
return hasilIndex;
}
//mendapatkan index data dan index dari klaster yang nilai
membershipnya paling maksimal
public Double[][] getClusterIndex2(){
int j;
double max;
int index = 0;
Double hasilIndex[][] = new Double[datumlength][2];
int i=0;
for(i=0;i<datumlength;i++){
max=0.0;
for(j=0;j<clustercount;j++){
if(max<u1[i][j]){
max=u1[i][j];
index=j;
}
hasilIndex[i][1]=max;//nilai
membership
}
hasilIndex[i][0]=(double)index;
//nilai klaster
}
return hasilIndex;
}
//mendapatkan klaster
public Double[][] getDataCluster(){
int jmldata=0;
Double[][] hasilData=new Double[clustercount][];
Double[] temp=new Double[datumlength];
int[] clusterIndex=this.getClusterIndex();
for(int i=0;i<clustercount;i++){
jmldata=0;
for(int
j=0;j<datumlength;j++){
if(clusterIndex[j]==i){
temp[jmldata++]=datum[j];
}
}
hasilData[i]=new Double[jmldata];
for(int k=0;k<jmldata;k++){
hasilData[i][k]=temp[k];
}
}
return hasilData;
}
//mendapatkan klaster dan data dari hasil komputasi
public Object[][] getDataCluster2() {
int jmldata=0;
Object[][] hasilData=new Object[datumlength][2];
int[] clusterIndex=this.getClusterIndex();
for(int i=0; i<datumlength; i++) {
hasilData[i][0] =
clusterIndex[i];
hasilData[i][1] = datum[i];
}
return hasilData;
}
//mendapatkan nilai dari klaster,data,membership paling maksimal dari
hasil komputasi
public Object[][] getDataCluster3() {
int jmldata=0;
Object[][] hasilData=new Object[datumlength][3];
Double[][] clusterIndex=this.getClusterIndex2();
for(int i=0; i<datumlength; i++) {
hasilData[i][0] =
clusterIndex[i][0]; //nilai
klaster
hasilData[i][1] = datum[i]; //datanya
hasilData[i][2] =
clusterIndex[i][1]; //nilai
membership maksimal
}
return hasilData;
}
//mendapatkan nilai dari klaster,data,membership paling maksimal dan
tanggal dari hasil komputasi
public Object[][] getDataCluster4(String[] strTgl) {
int jmldata=0;
String[] dataTgl=strTgl;
Object[][] hasilData2=new Object[datumlength][4];
Double[][] clusterIndex=this.getClusterIndex2();
for(int i=0; i<238; i++) {
hasilData2[i][0] =
clusterIndex[i][0]; //nilai klaster
hasilData2[i][1] = datum[i]; //nilai data
hasilData2[i][2] = clusterIndex[i][1];
//nilai membership
hasilData2[i][3]= dataTgl[i]; //nilai tanggal
}
return hasilData2;
}
//mendapatkan nilai dari klaster,data,membership paling maksimal,
tanggal dan hari dari hasil komputasi
public Object[][] getDataCluster5(String[] strTgl,String[] hari) {
int jmldata=0;
String[] dataTgl=strTgl;
String[] dataHari=hari;
//
System.out.println("datumlengthnya : " + datumlength );
Object[][] hasilData2=new Object[datumlength][5];
Double[][] clusterIndex=this.getClusterIndex2();
for(int i=0; i<238; i++) {
hasilData2[i][0] =
clusterIndex[i][0];
hasilData2[i][1] = datum[i];
hasilData2[i][2] =
clusterIndex[i][1];
hasilData2[i][3]= dataTgl[i];
hasilData2[i][4]=dataHari[i];
}
return hasilData2;
}
}
|
hariFrame.form
|
<?xml
version="1.0" encoding="UTF-8" ?>
<Form
version="1.3" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<Properties>
<Property
name="defaultCloseOperation" type="int"
value="2"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty
name="formSize" type="java.awt.Dimension"
value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,44,0,0,2,-91"/>
<SyntheticProperty
name="formSizePolicy" type="int" value="0"/>
<SyntheticProperty
name="generateSize" type="boolean"
value="true"/>
<SyntheticProperty
name="generateCenter" type="boolean"
value="true"/>
</SyntheticProperties>
<AuxValues>
<AuxValue
name="FormSettings_generateMnemonicsCode"
type="java.lang.Boolean" value="false"/>
<AuxValue
name="FormSettings_listenerGenerationStyle"
type="java.lang.Integer" value="0"/>
<AuxValue
name="FormSettings_variablesLocal"
type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier"
type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103"
groupAlignment="0" attributes="0">
<Group type="102"
alignment="1" attributes="0">
<EmptySpace
pref="135" max="32767" attributes="0"/>
<Component
id="jLabel1" min="-2" pref="373"
max="-2" attributes="0"/>
<EmptySpace
min="-2" pref="161" max="-2"
attributes="0"/>
</Group>
<Group type="102" alignment="0"
attributes="0">
<EmptySpace
min="-2" pref="23" max="-2"
attributes="0"/>
<Component
id="jPanel1" min="-2" max="-2"
attributes="0"/>
<EmptySpace
pref="25" max="32767" attributes="0"/>
</Group>
<Group type="102"
alignment="0" attributes="0">
<EmptySpace
min="-2" pref="157" max="-2"
attributes="0"/>
<Component
id="jlblJudul" min="-2" pref="328"
max="-2" attributes="0"/>
<EmptySpace
pref="184" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103"
groupAlignment="0" attributes="0">
<Group type="102"
alignment="0" attributes="0">
<EmptySpace max="-2"
attributes="0"/>
<Component
id="jLabel1" min="-2" max="-2"
attributes="0"/>
<EmptySpace
max="-2" attributes="0"/>
<Component
id="jlblJudul" min="-2" pref="22"
max="-2" attributes="0"/>
<EmptySpace
pref="24" max="32767" attributes="0"/>
<Component
id="jPanel1" min="-2" max="-2"
attributes="0"/>
<EmptySpace
max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container
class="javax.swing.JPanel" name="jPanel1">
<Properties>
<Property name="border"
type="javax.swing.border.Border"
editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border
info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
<EtchetBorder/>
</Border>
</Property>
</Properties>
<Layout>
<DimensionLayout
dim="0">
<Group type="103"
groupAlignment="0" attributes="0">
<Group type="102"
alignment="0" attributes="0">
<EmptySpace
max="-2" attributes="0"/>
<Group
type="103" groupAlignment="0"
attributes="0">
<Component
id="jScrollPane2" alignment="0" pref="597"
max="32767" attributes="0"/>
<Group
type="102" alignment="0" attributes="0">
<Component
id="jButton1" min="-2" pref="140"
max="-2" attributes="0"/>
<EmptySpace
min="-2" pref="17" max="-2" attributes="0"/>
<Component
id="jButton2" min="-2" pref="140"
max="-2" attributes="0"/>
</Group>
<Component
id="jLabel2" alignment="0" min="-2"
pref="199" max="-2" attributes="0"/>
<Component
id="jScrollPane1" alignment="0" pref="597"
max="32767" attributes="0"/>
</Group>
<EmptySpace
max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout
dim="1">
<Group type="103"
groupAlignment="0" attributes="0">
<Group type="102"
alignment="0" attributes="0">
<EmptySpace
max="-2" attributes="0"/>
<Group
type="103" groupAlignment="0" max="-2"
attributes="0">
<Component
id="jButton2" max="32767" attributes="1"/>
<Component
id="jButton1" alignment="0" max="32767"
attributes="1"/>
</Group>
<EmptySpace max="-2"
attributes="0"/>
<Component
id="jScrollPane2" min="-2" pref="226"
max="-2" attributes="0"/>
<EmptySpace
max="-2" attributes="0"/>
<Component
id="jLabel2" pref="20" max="32767"
attributes="0"/>
<EmptySpace
max="-2" attributes="0"/>
<Component
id="jScrollPane1" min="-2" pref="121"
max="-2" attributes="1"/>
<EmptySpace
max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component
class="javax.swing.JButton" name="jButton1">
<Properties>
<Property
name="font" type="java.awt.Font"
editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Times New Roman"
size="14" style="0"/>
</Property>
<Property
name="text" type="java.lang.String"
value="generate"/>
</Properties>
<Events>
<EventHandler
event="actionPerformed"
listener="java.awt.event.ActionListener"
parameters="java.awt.event.ActionEvent"
handler="jButton1ActionPerformed"/>
<EventHandler
event="ancestorAdded"
listener="javax.swing.event.AncestorListener" parameters="javax.swing.event.AncestorEvent"
handler="jButton1AncestorAdded"/>
</Events>
</Component>
<Container
class="javax.swing.JScrollPane" name="jScrollPane2">
<Layout
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component
class="javax.swing.JTable" name="jTable2">
<Properties>
<Property
name="model" type="javax.swing.table.TableModel"
editor="org.netbeans.modules.form.editors2.TableModelEditor">
<Table
columnCount="4" rowCount="4">
<Column
editable="false" title="Title 1"
type="java.lang.Object"/>
<Column
editable="false" title="Title 2"
type="java.lang.Object"/>
<Column
editable="false" title="Title 3"
type="java.lang.Object"/>
<Column
editable="false" title="Title 4"
type="java.lang.Object"/>
</Table>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
<Component
class="javax.swing.JButton" name="jButton2">
<Properties>
<Property
name="text" type="java.lang.String"
value="Close"/>
</Properties>
<Events>
<EventHandler
event="actionPerformed"
listener="java.awt.event.ActionListener"
parameters="java.awt.event.ActionEvent"
handler="jButton2ActionPerformed"/>
</Events>
</Component>
<Container
class="javax.swing.JScrollPane" name="jScrollPane1">
<Layout
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component
class="javax.swing.JTable" name="jTable1">
<Properties>
<Property
name="model" type="javax.swing.table.TableModel"
editor="org.netbeans.modules.form.editors2.TableModelEditor">
<Table
columnCount="4" rowCount="4">
<Column
editable="true" title="Title 1"
type="java.lang.Object"/>
<Column
editable="true" title="Title 2"
type="java.lang.Object"/>
<Column
editable="true" title="Title 3"
type="java.lang.Object"/>
<Column
editable="true" title="Title 4"
type="java.lang.Object"/>
</Table>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
<Component
class="javax.swing.JLabel" name="jLabel2">
<Properties>
<Property
name="font" type="java.awt.Font"
editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Times New
Roman" size="14" style="1"/>
</Property>
<Property
name="foreground" type="java.awt.Color"
editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="0"
green="0" red="cc" type="rgb"/>
</Property>
<Property
name="text" type="java.lang.String" value="Range [
benchmark ]"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Component
class="javax.swing.JLabel" name="jLabel1">
<Properties>
<Property name="font"
type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Times New
Roman" size="14" style="1"/>
</Property>
<Property
name="foreground" type="java.awt.Color"
editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="0"
green="0" red="cc" type="rgb"/>
</Property>
<Property
name="horizontalAlignment" type="int"
value="0"/>
<Property name="text"
type="java.lang.String" value="Detail Data Index Harga Saham
Gabungan Terklaster"/>
</Properties>
</Component>
<Component
class="javax.swing.JLabel" name="jlblJudul">
<Properties>
<Property name="font"
type="java.awt.Font"
editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Times New
Roman" size="14" style="1"/>
</Property>
<Property
name="foreground" type="java.awt.Color"
editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="0"
green="0" red="cc" type="rgb"/>
</Property>
<Property
name="horizontalAlignment" type="int"
value="0"/>
<Property name="text"
type="java.lang.String" value=" "/>
</Properties>
</Component>
</SubComponents>
</Form>
|
No comments:
Post a Comment
silahkan membaca dan berkomentar