[机器学习系统设计]如何对真实样本分类(上)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习系统设计]如何对真实样本分类(上)相关的知识,希望对你有一定的参考价值。

1. Iris数据集

Iris数据集(鸢尾花数据集):包含不同种类Iris花朵的数据,可以通过花的形态来识别花的种类。数据集包含花的四个属性(特征):花萼长度,花萼宽度,花瓣长度,花瓣宽度。

sklearn中的iris数据集有5个key:  [‘target_names’, ‘data’, ‘target’, ‘DESCR’, ‘feature_names’]

(1)其中target_names 是分类名称 :[‘setosa’ ‘versicolor’ ‘virginica’],即分别为山鸢尾花,变色鸢尾花和维吉尼亚鸢尾花。

(2)data存储着四种特征的数据,如下所示:

[[ 5.1  3.5  1.4  0.2]

 [ 4.9  3.   1.4  0.2]

  ………………………

 [ 6.2  3.4  5.4  2.3]

 [ 5.9  3.   5.1  1.8]]

(3)target对应着每一行数据的类别,分别为“0”,“1”,“2”,一个150个

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]

(4)feature_names表示特征名称

(‘feature_names:’, [‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’])

(5)DESCR:对这个数据集的描述

1.1    可视化

目标:在4种特征的数据中抽取两种特征数据,在二维平面中绘出。

代码:

# -*- coding: utf-8 -*-

from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np
import scipy as sp

data=load_iris() #加载数据集
#根据key赋予特征,目标等
features=data[‘data‘]
feature_names=data[‘feature_names‘]
target=data[‘target‘]
target_name=data[‘target_names‘]
labels=data[‘target_names‘][data[‘target‘]]


pairs = [(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)] #4种抽取两两对
for i,(p0,p1) in enumerate(pairs):
plt.subplot(2,3,i+1) #subplot是将多个图画到一个平面上的工具
for t,marker,c in zip(range(3),">ox","rgb"):
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.show()

运行结果:

技术分享

函数说明:

A.zip():zip函数接受任意多个序列作为参数,返回一个tuple列表。

x = [1, 2, 3]

y = [4, 5, 6]

z = [7, 8, 9]

xyz = zip(x, y, z)   #xyz=[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

B. enumerate():enumerate函数用于遍历序列中的元素以及它们的下标。

C.for t,marker,c in zip(range(3),">ox","rgb")的使用:

用红色三角形标记山鸢尾花,绿色圆圈表示变色鸢尾花,蓝色叉表示维吉尼亚鸢尾花。

1.2    分类

(1)将山鸢尾花(Iris Setosa)与其它两类分开

      通过上面的图形可以明显看出Setosa与其他两类花的区别,通过下面代码可以找出切分点。

      思路:只用花瓣的长度去判断,找出Setosa的最大长度和其他种类花花瓣的最小长度。

plength=features[:,2]             #第三个特征代表花瓣长度,只用它去判断
is_setosa=(target==0)             #将setosa的数据提取出来
setosa_plength=plength[is_setosa]
other_plength=plength[~is_setosa]
max_setosa=setosa_plength.max()     #找出 setosa 花瓣的最大长度
min_non_setosa=other_plength.min()  #非setosa花瓣的最小长度
print(Maximun of setosa: {0}..format(max_setosa)) #输出值是1.9
print(Minimum of others: {0}..format(min_non_setosa)) #输出值是3.0

可以得到1.9和3.0,利用它构建一个简单的分类模型:如果花瓣长度小于2,那么它是山鸢尾花。

for n in range(150):
  if features[n,2]<2:print It is Setosa
  else:print others

(2)将变色鸢尾花(Versicolor)和维吉尼亚鸢尾花(Virginica)分开

思路:

1.在非Setosa的鸢尾花抽取Virginica;

2.对可能的特征和阈值进行遍历,找出最高的正确率。

features=features[~is_setosa] #[[ 7.   3.2  4.7  1.4]...] 将不是setosa的输出
labels = labels[~is_setosa]   #[[‘versicolor‘...‘virginica‘...] 将其他两种标签输出
virginica = (labels == virginica)  #[False...True...]

best_acc=-1.0
for fi in xrange(features.shape[1]):   #features.shape[1]=4
  thresh=features[:,fi].copy()
  thresh.sort()
  for t in thresh:
    pred=(features[:,fi])>t
    acc=(pred==virginica).mean()
    if acc>best_acc:
      best_acc=acc      #准确率
      best_fi=fi        #选择的特征
      best_t=t          #选择的阈值
print best_acc,best_fi,best_t

输出:best_acc=0.94;best_fi=3;best_t=1.6。

可知知道最高的准确率为94%,最好的特征为第4个,即花瓣宽度,阈值为1.6。

对这一结果用图形表示:

target2=target[49:149]
features=features[0:100]
a=[1,2]
fx=[best_t]*100
fy=sp.linspace(2,8,100)

for t,marker,c in zip(a,"ox","gb"):
    plt.scatter(features[target2 == t,3],
                features[target2 == t,2],
                marker=marker,
                c=c)
    plt.plot(fx,fy,"b--")
    plt.xlabel(feature_names[3])
    plt.ylabel(feature_names[2])
    plt.xticks()
    plt.yticks()
plt.show()

可以得到下面的图形:

技术分享

 





























以上是关于[机器学习系统设计]如何对真实样本分类(上)的主要内容,如果未能解决你的问题,请参考以下文章

PU Learning简介:对无标签数据进行半监督分类

机器学习123模型评估与选择 (上)

模式识别与机器学习——4.1模式分类可分性的测度

机器学习实战笔记-1基础

机器学习面试常见问题

机器学习笔记模型评估与选择