从一个菜鸟开始学习机器学习

今晨看了一篇文章,说是2025年十大最有前途的技术,当然有“移动互联网”,而其间也有一个是“自动化知识处理”,这其中的关键技术是机器学习。机器学习是一个交叉学科,它与科学计算有很密切的关系,但不完全是数学,它与程序设计很多关联,但却也不是完全的传统意义上之程序设计,因此,它应当是一个独立的学科,既不像想象中那么神秘,却需要相对高一些的门槛,需要时间长一些的积累,需要心不要太急,需要水滴石穿的功夫,需要真的喜欢这个东西,真希望通过博客这个平台找到在漫漫前进道路上共勉的同志。
我想从《机器学习系统设计》(Building Machine Learning Systems with Python, Turing, Packt )开始,先从代码学习开始。以下是书中第一个例子的代码(Page23,中文版),通过不同的属性组合二维显示样本数据分布。

# figure1.py
import numpy as np
from sklearn.datasets import load_iris
from matplotlib import pyplot as plt
from CodeWarrior.CodeWarrior_suite import target

data = load_iris()
features = data['data']
feature_names = data['feature_names']
target = data['target']

pairs = [(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)]
for i, (p0, p1) in enumerate(pairs):
    plt.subplot(2, 3, i+1)
    for t,marker,c in zip(range(3), ">ox", "rgb"):
    # zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,
    # 将对象中对应的元素打包成一个个tuple(元组),
    # 然后返回由这些tuples组成的list(列表)。
        plt.scatter(features[target == t,p0],
                     features[target == t,p1], 
                     marker = marker, 
                     c = c)
    plt.xlabel(feature_names[p0])
    plt.ylabel(feature_names[p1])
    plt.xticks([])
    plt.yticks([])
plt.savefig('../1400_2_01.png')

保存的图像为:
Figure1
从图中可以看到,红色样本是较容易从其他两类样本中区分出来的,绿色和蓝色的样本不太容易能够分出来,书中给出的方法是:

COLOUR_FIGURE = False

from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
data = load_iris()
features = data['data']
feature_names = data['feature_names']
species = data['target_names'][data['target']]

setosa = (species == 'setosa')
features = features[~setosa]
species = species[~setosa]
virginica = species == 'virginica'

t = 1.75
p0,p1 = 3,2

if COLOUR_FIGURE:
    area1c = (1.,.8,.8)
    area2c = (.8,.8,1.)
else:
    area1c = (1.,1,1)
    area2c = (.7,.7,.7)

x0,x1 =[features[:,p0].min()*.9,features[:,p0].max()*1.1]
y0,y1 =[features[:,p1].min()*.9,features[:,p1].max()*1.1]

plt.fill_between([t,x1],[y0,y0],[y1,y1],color=area2c)
plt.fill_between([x0,t],[y0,y0],[y1,y1],color=area1c)
plt.plot([t,t],[y0,y1],'k--',lw=2)
plt.plot([t-.1,t-.1],[y0,y1],'k:',lw=2)
plt.scatter(features[virginica,p0], features[virginica,p1], c='b', marker='o')
plt.scatter(features[~virginica,p0], features[~virginica,p1], c='r', marker='x')
plt.ylim(y0,y1)
plt.xlim(x0,x1)
plt.xlabel(feature_names[p0])
plt.ylabel(feature_names[p1])
plt.savefig('../1400_02_02.png')

输出的图是:
Figure2
其实是用眼睛来看,找出一个切割的地方,在图中就是1.75,然后画出这个切线来。

猜你喜欢

转载自blog.csdn.net/StreamRock/article/details/45457713