级联样式表(Cascading Style Sheet)简称“CSS”,通常又称为“风格样式表(StyleSheet)”,它是用来进行网页风格设计的。
基本的理解就是将样式封装到一个个类里,这个类有不同的表现形式!包括class,a,table等。我们在编写网页代码的时候,只需将内容写上,他的表现(颜色,字体,大小等)封装在另外一个文件下!
实际CSS就是面向对象的思想,只是他将抽象这个环节运用在了风格的设计上,在网页的具体内容就是他们的具体实现!
当然,任何事情都有优点和缺点,下面我们先简单了解:
优点:
一. 精简代码,建设重构难度。
这个很容易理解,将样式抽象为一个类,节省了很多代码,让我们更容易理解且更容易维护!重构也只需更改设计文件就好
二. 网页访问速度
我个人的理解,由于浏览器解释代码执行时,由于样式的封装,保证了解释的统一,提高我们的浏览速度!
三. 浏览器兼容性
现在主流的浏览器基本都支持css,让我们的页面兼容性有了一个大的提升!
缺点:
一. 开发技术高
虽然我们的css兼容性好,但是,每个浏览器的实现方式有差别,导致了界面统一和友好地开发变得需要高技术!
二. 开发成本大
DIV+CSS布局相对table布局开发制作时间长。我们在css中开发时,要想很多问题,布局等等!
三. 开发时间长
以上两点,造成我们css的开发时间有点长
总体来说,CSS的优点大于缺点,统一的思想缔造了CSS让我们的网页浏览更加丰富多彩,网页的设计更加有张力!
1. Weka处理的数据表格中,一个横行称为一个实例(Instance),竖行代表一个属性(Arrtibute),数据表格称为一个数据集,在weka看来,呈现了属性之间的一种关系(Relation)
2. Weka存储数据的格式是ARFF(Attribute-RelationFile Format)文件,这是一种ASCII文本文件。
3. Weka的ARFF文件可以分为两部分。第一部分给出了头信息(Head information),包括了对关系的声明和对属性的声明。第二部分给出了数据信息(Data information),即数据集中给出的数据。从@Data标记开始,后面的就是数据信息了。
4. Weka作为数据挖掘,面临的第一个问题往往是我们的数据不是ARFF格式的。幸好,WEKA还提供了对CSV文件的支持,而这种格式是被许多其他软件所支持的。此外,WEKA还提供了通过JDBC访问数据库的功能。
5. 需要注意的是,matlab给出的csv文件往往没有属性名(Excel 给出的也可能没有)。而WEKA必须从CSV文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名。因此我们对于matlab给出的csv文件需要用UltraEdit打开,手工添加一行属性名。
6. Weka提供了命令将CSV文件转换成arff文件。
7. Weka GUI根据不同功能分为8个界面:
(1) 区域1的几个选项卡用来切换不同的挖掘任务面板。
(2) 区域2是一些常用按钮。包括打开数据,保存及编辑功能。
(3) 选择某个Filter,可以实现筛选数据或者对数据进行某种变换。
(4) 区域4展示了数据集的一些基本情况。
(5) 列出了数据集的所有属性。
(6) 区域6中有关于这个属性的摘要,注意对于数值属性和分类属性,摘要的方式是不一样的。
(7) 区域7中是区域5属性的直方图。
(8) 区域8是状态栏,可以查看Log义判断是否有错。右边的weka鸟在动的话说明weka正在执行挖掘任务。右键点击状态栏可以执行java内存垃圾回收。
8. 通常对于数据挖掘任务来说,ID这样的信息是无用的。
9. Weka把分类(Classification)和回归(Regression)都放在“Classify”选项卡中。
10. 在weka中,待预测的目标(输出)被称为Class属性,这应该是来自分类任务的“类”。一般的,若Class属性是分类型时我们的任务才叫分类,Class属性是数值型时我们的任务叫回归。
11. 所谓回归分析法,是在掌握大量观察数据的基础上,利用数理统计方法建立因变量和自变量之间的回归关系函数表达式(称回归方程)。
12. 在回归分析中,又依据描述自变量和因变量之间因果关系的函数表达式是线性的还是非线性的,分为线性回归分析和非线性分析。通常线性回归分析法是最基本的分析方法,遇到非线性回归问题可以借助数学手段化为线性回归问题处理。
13. 一元线性回归是指事物发展的自变量和因变量之间是单因素的简单线性关系,它的模型可以表示为: y=a+bx
14. 多元线性回归是指一个因变量和多个自变量之间的线性关系,模型一般形式为:
Y=a+b1x1+b2x2+…+bnxn
15. 为了保证生成的模型的准确性而不至于出现拟合的现象,我们有必要采用10折交叉验证来选择和评估模型。
16. 10 折交叉验证:英文名叫做10-fold corss –validation,用来测试算法的准确性。是常用的测试方法。将数据集分成10份,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得到相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精确读的估计,一般还需要进行多次10折交叉验证。
17. 数据挖掘中分类与聚类最本质的区别:
简单的说:分类是“监督学习”,事先知道有那些类别可以分。聚类—是“无监督学习”,事先不知道要分成哪些类。
数据分类是指分析数据库中的一组对象,找出去共同属性。然后根据分类模型,把他们划分为不同的类别。分类数据首先根据训练数据建立分类模型,然后根据这些分类描述分类数据中的测试数据或产生更恰当的描述。
聚类是指数据库中的数据可以划分为一些列有意义的子集,即类。在同一类别中,个体之间的距离较小,而不同类别上的个体之间的距离偏大。聚类分析通常称为“无监督的学习”
18. 在进行聚类运算时,设置seed是设置一个随机种子,依此产生一个随机数,用来得到K均值算法中第一次给出的K个簇中心的位置。
第一次使用RMI实现java分布式,利用一个简单的例子进行测试。
首先需要一个实现了Remote的接口,这个接口提供远程对象的方法集
这个接口如下:
package com.hello; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Date; public interface HelloServer extends Remote { public String echo(String msg)throws RemoteException; public Date getTime()throws RemoteException; }
在客户端和服务器上都应该有这样一个接口,只是可以使用的服务。
然后再服务端需要一个实现了HelloServer的类,并使其成为能够提供远程服务的远程对象,这里通过继承UnicastRemoteObject使其导出远程对象:
package com.hello; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Date; public class HelloServerImpl extends UnicastRemoteObject implements HelloServer { private String name; protected HelloServerImpl(String name) throws RemoteException { this.name=name; } public String echo(String msg) throws RemoteException { System.out.println("调用了echo()方法"); return "echo "+msg+" from "+name; } public Date getTime() throws RemoteException { System.out.println("调用了getTime()方法"); return new Date(); } }接下来编写服务端程序
package com.hello; import javax.naming.Context; import javax.naming.InitialContext; public class SimpleServer { public static void main(String[]args) { try { HelloServer service1=new HelloServerImpl("service1"); HelloServer service2=new HelloServerImpl("service2"); Context namingContext=new InitialContext(); namingContext.rebind("rmi://localhost:1099/HelloServer1",service1); namingContext.rebind("rmi://localhost:1099/HelloServer2",service2); System.out.println("注册了两个对象"); } catch(Exception e) { e.printStackTrace(); } } }
接下来编写客户端程序
package com.hello; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; public class SimpleClient { public static void main(String[]args) { String url="rmi://localhost:1099/"; try { Context namingContext=new InitialContext(); //获得远程对象的存根对象 HelloServer service1=(HelloServer)namingContext.lookup(url+"HelloServer1"); HelloServer service2=(HelloServer)namingContext.lookup(url+"HelloServer2"); Class stubClass=service1.getClass(); //测试存根类所属的类 System.out.println("service1是 "+stubClass.getName()); //测试存根类实现的接口 Class[] interfaces=stubClass.getInterfaces(); for(int i=0;i<interfaces.length;i++) { System.out.println("存根类实现了"+interfaces[i].getName()); } System.out.println(service1.echo("hello")); System.out.println(service1.getTime()); System.out.println(service2.echo("hello")); System.out.println(service2.getTime()); NamingEnumeration<NameClassPair> e=namingContext.list("rmi:"); while(e.hasMore()) { System.out.println(e.next().getName()); } } catch(Exception e) { e.printStackTrace(); } } }
在运行程序之前需要进入到HelloServer的bin目录下开启rmiregistry
命令:start rmiregistry
如果没有错误,就会弹出新的黑框;
接下来客户端还需要一个存根类,为了获得它需要在服务端的bin目录下用如下命令:
rmic com.hello.SimpleServer
这个命令注意:SimpleServer是完整的类名,并且没有.class后缀
如果成功的话会产生一个HelloServerImpl_Stub.class,将其与客户端class文件放在一起。
下来就可以运行程序了。
首先运行服务端,运行结果如下:
然后运行客户端,运行结果如下:
而此时的服务端状态如下:
说明客户端对远程对象的方法调用其执行过程确实是在服务端进行的。