机器学习概览
机器学习简介
吴恩达的机器学习课程
总体感觉这门课讲的浅显易懂,把那些比较复杂的数学推导都跳过了,是非常不错的入门教程,但是如果想经过这门课马上就入门机器学习是不可能的。这门课应该是算是以科普为主吧!
这个课里面数学推导都模糊化了,对于直观理解一些概念挺有帮助的,所以我会将它用于入门学习。
课程确实非常的简单易懂,几乎稍微困难的地方就会很细致的讲解,讲解非常的细致,入门机械学习的,我上了大概5周,作业也都积极完成了,但发现一直在讲算法和如何在octave里面进行数据处理,应用层面讲得都是很基础的例子没有太强的实践操作价值,因为实际情况要复杂的多。我简单浏览了整个课程的内容,直到最后我也没发现有在应用层面的具体讲解,最后依然是在讲算法,所以我就去试着寻找其他更高效的课程了。
当然,再强调一遍,这门课是给小白的,所以刷完这门课仅仅是初步入门(甚至连入门都算不上),因为为了照顾小白的数学底子,有些涉及到偏复杂的概率论的知识点都没讲(其实也不复杂,只不过需要更多时间做解释
版本问题
按时间区分
吴恩达的机器学习课程,按照讲授的时间来区分,有两个版本。一个是斯坦福大学网络课程 CS229
,另外一个是和Coursera合作的版本。这里把前者简称为 CS229
版,后者简称为 Coursera
版。CS229
版比较注重数学原理,Coursera
版更注重算法和实际应用。
按语言区分
Coursera 上的版本,有中文简体字幕。如果英文不错,可以直接在Coursera上学习,课程可以选择免费学习模式。
网易云课堂引进了这套课程,同时添加了中文简体和英文双语字幕,课程是免费的。
PS:
- 网易云课堂版本缺少了本套课程最开头的一个1分18秒的视频,是吴恩达简单介绍机器学习的,没有也无伤大雅,可以在Coursera观看。或者,Bilibili有这个视频的翻译:Welcome to Machine Learning - 吴恩达
- Coursera上课程最开头的一个1分18秒的视频没有中文简体字幕,只有中文繁体字幕。
- 在网易云课堂上线这套课程之前,Bilibili上也有这套课程的中文简体翻译版,就是Welcome to Machine Learning - 吴恩达,和上边的链接相同。UP主说网易云课堂上的字幕更好,建议直接看网易云课堂的,Bilibili的在其他有需要的时候使用。
Servlets and JSP
SQL 必知必会 第 1~10 课
CH1 | 基本概念 | CH6 | 分组 |
---|---|---|---|
CH2 | 检索数据 | CH7 | |
CH3 | 过滤数据 | CH8 | |
CH4 | 创建拼接字段 | CH9 | |
CH5 | 使用函数 | CH10 |
Java 对象与类
类和对象
定义类的语法为:
1 | [修饰符] class 类名 {} |
修饰符可以是 public
、final
、abstract
。
public
:所有包中的类都可以使用该类。
defalut
:该类只能被同一个包中的类使用。
final
:该类不可继承。
abstract
表明该类是一个抽象类。
如果什么修饰符都不使用,那么该类只能被同一个包中的类使用。
此处需要区分【外部类】和【内部类】
定义成员变量的语法格式如下:
1 | [修饰符] 类型 成员变量名 [=默认值] |
修饰符可以省略,也可以是 public
、protected
、private
、static
、final
。其中 public
、protected
、private
只能出现一个,可以与 static
、final
组合起来修饰成员变量。
public
:
private
:
protected
:
default
:
定义方法的语法格式如下:
1 | [修饰符] 方法返回值类型 方法名(形参列表){} |
public
:
private
:该方法只能被
protected
:该方法既能被同一个包中的其他类访问,也可以被不同包中的子类访问。
default
:该方法只能被同一个包中的其他类访问。
static 修饰的成员不能访问没有 static 修饰的成员。但是非 static 方法可以访问 static 成员变量。
访问控制级别
private
、default
、protected
、public
。
default
指没有指定任何访问控制符。
关于类名与源代码文件名
如果一个 Java 源文件中的所有类都没有使用 public 修饰,那么该源文件可以使用任意合法的文件名。但是只要 Java 源文件中定义了一个 public 修饰的类,则这个源文件的文件名必须和使用 public 修饰的类的名称相同。
方法
方法的参数传递机制
Java 的方法是采用值传递的方式的。也就是说方法中的形参实际上是实参的拷贝。如果形参是原生类型,那么形参就直接是实参的拷贝。如果形参是引用类型,那么形参就是实参的引用的拷贝。
形参个数可变
从 JDK 1.5 开始,Java 支持个数不确定的形参。定义方法是在最后一个形参的类型后边加上三个点(...
)。
例如:
1 | class Varargs { |
注意:一个方法只能包含一个数量可变的形参,而且如果有多个形参的时候,数量可变的形参必须位于形参列表的最后一个。
方法重载(Overload)
重载方法的定义是方法名相同、形参列表不同。和返回值类型、修饰符没有关系。
方法重写(Override)
自类重写父类的方法。需要满足“两同两小一大”:
- 方法名相同
- 形参列表相同
- 子类方法的返回值应该比父类方法的返回值类型更小或相等
- 字类方法声明抛出的异常应该比父类方法生命抛出的异常更小或相等
- 子类方法的访问权限应该比父类方法的访问权限更大或相等。
多态
对于方法,总是会调用运行时类型的方法。
对于引用变量,系统总是试图访问编译时类型所定义的成员变量,而不是运行时类型所定义的成员变量。
面向对象的一些基本概念
对象中的数据称为 实例域(instance field)
类之间的关系
在类之间,最常见的关系有
- 依赖(Dependency):“uses-a”
- 聚合(Aggregation):“has-a”
- 继承(Inheritance):“is-a”
使用Java语言提供的预定义类
new
操作符返回的是一个引用。
对象和对象变量的区别
对象变量只是一个变量。对象是类的一个示例。一个对象变量引用一个对象。
可以显式地将对象变量设置为 null
,表示对象变量没有引用任何对象。注意,如果只定义局部变量而不显式地初始化,那么局部变量是不会自动初始化为 null
的。所以如果想设置对象变量为不引用任何对象,一定要显式地设置为 null
。