在TensorFlow的Udacity课程学习中,牵涉到这个类库的大量使用,所以,先在youtube上做了个相关课程的补充学习。
Supervised Learning(有监督学习)
Machine Learning分为有监督学习与无监督学习,这个系列重在介绍有监督学习,即,通过告知算法有关Features和对应的输出Labels,然后当有新的feature数据时,做label预测。
环境搭建
首选Anaconda安装,Mac下可以用brew直接装。
通过Iris数据库管中窥豹
Iris是sklearn中内嵌的一组数据,可以用以学习通过特征值对鸢尾花进行分类。1
数据加载
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data # numpy.ndarray, Features的那些observation
y = iris.target # numpy.ndarray与data的一个label的一一对应
上面两个数据都是numpy中ndarray类型。ndarray作为类似于高代中的矩阵来表达数据,通过高效的C底层库,能比python内置类库更快地做大量数据处理。 iris.data.shape
的结果为 (150, 4),表面一共有150组数据(Observations),每组有4个数据(Features)。在金融领域的数据分析处理上,因为对于表操作得比较多,所以pandas(建立在numpy之上)也是使用比较多的库。
K-nearest neighbors (KNN) classification
对已有数据进行分类,当新的数据出现时,寻找已知数据中K个和新数据最接近的数据,然后通过这K个数据的label,得出新的数据应该分在哪个类型中。
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
X_new = [[3, 5, 4, 2], [5, 4, 3, 2]]
knn.predict(X_new)
通过调用KNeighborsClassifier这个类,然后把一开始加载的数据通过fit()函数来适配,然后对于新的数据用predict来得出属于哪一类。这个里面的K值使用了1,不一定是最优的,那如何找到这个最优参数?
验证模型参数
对于模型进行验证,一种方法就是把数据进行分类,分成2类。然后寻找测试数据匹配度好的参数。有些过拟合的情况下,训练数据的拟合度很好,但到测试数据就悲剧了。
- 训练数据 (模型用以匹配)
- 测试数据 (模型用以测试其有效性)
其中,train_test_split可以自动完成这个分类工作,并且通过test_size自动划分百分之多少的数据作为测试数据。
from sklearn.model_selection import train_test_split # 注意,这个模块从0.20开始