最小二乘法+.docx
《最小二乘法+.docx》由会员分享,可在线阅读,更多相关《最小二乘法+.docx(12页珍藏版)》请在冰豆网上搜索。
最小二乘法+
数据挖掘-最小二乘法预测
完成日期2014年4月
实验一 成绩预测
1.实验目的:
学会使用最小二乘法进行数据预测
2.实验内容:
根据给出的一系列期中期末成绩,使用最小二乘法求由学生期中成绩预测学生期末成绩的方程,并建立应用程序实现:
方程的建立算法;绘制X,Y关系曲线图;提供新数据的预测功能。
3.实验环境:
3.1硬件环境
CPU:
P41.8GHz
内存:
4G
硬盘空间:
40GB
3.2软件环境
操作系统:
Windows7旗舰版
开发环境配置:
Eclipse
应用服务器配置:
jdk1.6.0_32
4.程序设计思路及代码编程
程序设计思路:
使用adodc控件连接数据库,在程序运行初始便从表中将原有数据显示在网格中。
界面中设置两个文本框,一个用于输入中期成绩后一个用于输出预测期末成绩。
代码编程:
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextField;
importjavax.swing.SwingUtilities;
importjavax.swing.UIManager;
importjavax.swing.table.DefaultTableModel;
importorg.dyno.visual.swing.layouts.Constraints;
importorg.dyno.visual.swing.layouts.GroupLayout;
importorg.dyno.visual.swing.layouts.Leading;
//VS4E--DONOTREMOVETHISLINE!
publicclasswindowextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
privateJLabeljLabel0;
privateJTablejTable0;
privateJScrollPanejScrollPane0;
privateJLabeljLabel1;
privateJLabeljLabel4;
privateJLabeljLabel3;
privateJTextFieldjTextField1;
privateJTextFieldjTextField2;
privateJButtonjButton0;
privateJTextFieldjTextField0;
privateJLabeljLabel2;
privateJButtonjButton1;
doublex[]={72,50,81,74,94,86,59,83,65,33,88,81};
doubley[]={84,63,77,78,90,75,49,79,77,52,74,90};
doublez=0;
privatestaticfinalStringPREFERRED_LOOK_AND_FEEL="javax.swing.plaf.metal.MetalLookAndFeel";
publicwindow(){
initComponents();
}
privatevoidinitComponents(){
setLayout(newGroupLayout());
add(getJLabel0(),newConstraints(newLeading(242,10,10),newLeading(12,12,12)));
add(getJLabel4(),newConstraints(newLeading(32,10,10),newLeading(388,10,10)));
add(getJLabel2(),newConstraints(newLeading(26,12,12),newLeading(231,19,10,10)));
add(getJTextField2(),newConstraints(newLeading(234,131,12,12),newLeading(385,28,10,10)));
add(getJLabel1(),newConstraints(newLeading(26,168,12,12),newLeading(46,25,10,10)));
add(getJLabel3(),newConstraints(newLeading(30,10,10),newLeading(326,12,12)));
add(getJButton0(),newConstraints(newLeading(434,10,10),newLeading(325,12,12)));
add(getJScrollPane0(),newConstraints(newLeading(238,200,10,10),newLeading(66,150,12,12)));
add(getJTextField1(),newConstraints(newLeading(234,130,12,12),newLeading(325,30,12,12)));
add(getJTextField0(),newConstraints(newLeading(234,130,12,12),newLeading(264,29,10,10)));
add(getJButton1(),newConstraints(newLeading(431,10,10),newLeading(262,12,12)));
setSize(641,459);
}
privateJButtongetJButton1(){
if(jButton1==null){
jButton1=newJButton();
jButton1.setText("确定");
jButton1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
doublea=getA(x,y);
doubleb=getB(x,y,a);
StringA=String.format("%.2f",a);
StringB=String.format("%.2f",b);
StringS="y="+A+"*"+"x"+"+"+B;
jTextField0.setText(String.valueOf(S));
}
});
}
returnjButton1;
}
publicstaticdoublegetA(doublex[],doubley[]){
intn=x.length;
return(n*pSum(x,y)-sum(x)*sum(y))
/(n*sqSum(x)-Math.pow(sum(x),2));
}
/**
*计算常量系数
*@paramx
*@paramy
*@parama
*@return
*/
publicstaticdoublegetB(doublex[],doubley[],doublea){
intn=x.length;
returnsum(y)/n-a*sum(x)/n;
}
privatestaticdoublesum(doublec[]){
doubles=0;
for(inti=0;ireturns;
}
privatestaticdoublesqSum(doublec[]){
doubles=0;
for(inti=0;ireturns;
}
privatestaticdoublepSum(doublex[],doubley[]){
doubles=0;
for(inti=0;ireturns;}
privateJLabelgetJLabel2(){
if(jLabel2==null){
jLabel2=newJLabel();
jLabel2.setText("根据最小二乘法计算得到预测方程为:
");
}
returnjLabel2;
}
privateJTextFieldgetJTextField0(){
if(jTextField0==null){
jTextField0=newJTextField();
}
returnjTextField0;
}
privateJButtongetJButton0(){
if(jButton0==null){
jButton0=newJButton();
jButton0.setText("预测");
jButton0.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
z=Integer.parseInt(jTextField1.getText());
doublea=getA(x,y);
doubleb=getB(x,y,a);
StringA=String.format("%.2f",a);
StringB=String.format("%.2f",b);
doublem=a*z+b;
StringM=String.format("%.2f",m);
jTextField2.setText(String.valueOf(M));
}});
}
returnjButton0;
}
privateJTextFieldgetJTextField2(){
if(jTextField2==null){
jTextField2=newJTextField();
}
returnjTextField2;
}
privateJTextFieldgetJTextField1(){
if(jTextField1==null){
jTextField1=newJTextField();
}
returnjTextField1;
}
privateJLabelgetJLabel3(){
if(jLabel3==null){
jLabel3=newJLabel();
jLabel3.setText("输入某位学生的期中成绩:
");
}
returnjLabel3;
}
privateJLabelgetJLabel4(){
if(jLabel4==null){
jLabel4=newJLabel();
jLabel4.setText("该学生期末成绩预测值为:
");
}
returnjLabel4;
}
privateJLabelgetJLabel1(){
if(jLabel1==null){
jLabel1=newJLabel();
jLabel1.setText("课程数据库中的学生成绩:
");
}
returnjLabel1;
}
privateJScrollPanegetJScrollPane0(){
if(jScrollPane0==null){
jScrollPane0=newJScrollPane();
jScrollPane0.setViewportView(getJTable0());
}
returnjScrollPane0;
}
privateJTablegetJTable0(){
if(jTable0==null){
jTable0=newJTable();
jTable0.setModel(newDefaultTableModel(newObject[][]{{"72","84",},{"50","63",},{"81","77",},{"74","78",},{"94","90",},
{"86","75",},{"59","49",},{"83","79",},{"65","77",},{"33","52",},{"88","74",},{"81","90",},},newString[]{
"期中成绩X","期末成绩Y",}){
privatestaticfinallongserialVersionUID=1L;
Class
>[]types=newClass
>[]{Object.class,Object.class,};
publicClass
>getColumnClass(intcolumnIndex){
returntypes[columnIndex];
}
});}
returnjTable0;
}
privateJLabelgetJLabel0(){
if(jLabel0==null){
jLabel0=newJLabel();
jLabel0.setText("最小二乘法预测学生期末成绩");
}
returnjLabel0;
}
privatestaticvoidinstallLnF(){
try{
StringlnfClassname=PREFERRED_LOOK_AND_FEEL;
if(lnfClassname==null)
lnfClassname=UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(lnfClassname);
}catch(Exceptione){
System.err.println("Cannotinstall"+PREFERRED_LOOK_AND_FEEL
+"onthisplatform:
"+e.getMessage());}
}
publicstaticvoidmain(String[]args){
installLnF();
SwingUtilities.invokeLater(newRunnable(){
@Override
publicvoidrun(){
windowframe=newwindow();
frame.setDefaultCloseOperation(window.EXIT_ON_CLOSE);
frame.setTitle("window");
frame.getContentPane().setPreferredSize(frame.getSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);}
});
}
}
5.程序实现
初始运行界面:
输入一期中成绩,点击预测:
如输入期中成绩89,执行为:
6.实验总结:
通过这次实验,我更加深入的了解了最小二乘法的运算过程,结合着java编程语言,把整个最小二乘法表达出来。
在实验过程中运用了窗体,使得人机交互变得更加简洁、方便,也顺便复习了一下窗体的相关知识。
当然在实验过程中也发现了自己的不足,因为学习的知识有限,没能画出一元线性图形来,不过希望在以后的学习可以更加完善自己,争取把程序做的更加完善。