本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
好了,机器学习进入正题了,我们从大家身边的实例开始讲起。
什么是标签
标签,通俗的讲是对某人某事物的凭经验的分类 。
大家都知道,人有高矮胖瘦之分,那么高是怎样定义出来的呢?
我查了一下,“高”在字典里的解释是:从下向上距离大;离地面远(跟“低”相对)。为什么解释“高”,要扯到“低”?
为了弄清楚“高”,我又查了一下“低”:从下向上距离小;离地面近(跟“高”相对)。
真想用爱情公寓里陈美嘉的名言对字典说:“我一口盐汽水喷si你!”
总之呢,从字典里搞清楚“高”是不可能的。但是我们每个人确实都觉得有的人长得高,有的人长得低(矮),这又是为什么呢?
什么是特征
如果你问姚明,觉得什么人算长得高?他可能会说:2米以上算长得高!
如果你问美女模特,觉得什么样的男人算长得高?她可能会说,1米75以上算长得高!
如果你问普通男人,觉得什么样的女人算长得高?他可能会说,1米6以上算长得高!
如果你问非洲某小人国部落,他可能会说,1米以上就算是巨人了!
明白了吗?其实大家心里都有一杆秤啊!标签的背后,是有某种可以量化为数字的指标做支撑,这就叫特征。
特征和标签的配对
好了,解释了特征和标签,现在我们可以进行特征和标签的配对了。接着上面的话题:
姚明眼中的人类:
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 矮 |
B | 1.61 | 矮 |
C | 1.76 | 矮 |
D | 2.1 | 高 |
美女模特眼中的人类:
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 矮 |
B | 1.61 | 矮 |
C | 1.76 | 高 |
D | 2.1 | 高 |
普通男人眼中的人类:
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 矮 |
B | 1.61 | 高 |
C | 1.76 | 高 |
D | 2.1 | 高 |
非洲某小人国部落眼中的人类:
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 高 |
B | 1.61 | 高 |
C | 1.76 | 高 |
D | 2.1 | 高 |
可以看出,在不同人眼中,即使相同的标签代表的含义也是不同的。以下我们以“普通男人眼中的人类”进一步展开讨论。
我们已经知道了普通男人眼中的人类关于高矮的标准是:1米6以上算长得高。
那么再有其他高度的人,我们很容易得到其他人的标签,如下:
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 矮 |
B | 1.61 | 高 |
C | 1.76 | 高 |
D | 2.1 | 高 |
E | 1.58 | 矮 |
F | 1.68 | 高 |
为了方便计算机识别,通常我们把标签改为0/1/2这样的数字,本例中我们用0代表“矮”,用1代表“高”,因此上表简化为
特征(身高,以米为单位) | 标签 | |
A | 1.51 | 0 |
B | 1.61 | 1 |
C | 1.76 | 1 |
D | 2.1 | 1 |
E | 1.58 | 0 |
F | 1.68 | 1 |
这样就形成了一个人类身高的特征——标签矩阵,一般来说,标签都是位于该矩阵的最后一列。
Python实现特征——标签矩阵
代码如下:
import numpy as np
S = np.array([[1.51,0],[1.61,1],[1.76,1],[2.1,1],[1.58,0],[1.68,1]])
print(S)
#运行结果:
[[1.51 0. ]
[1.61 1. ]
[1.76 1. ]
[2.1 1. ]
[1.58 0. ]
[1.68 1. ]]
取出标签和特征:
import numpy as np
S = np.array([[1.51,0],[1.61,1],[1.76,1],[2.1,1],[1.58,0],[1.68,1]])
#原始特征——标签矩阵
print("原始特征——标签矩阵是\n",S)
#取出标签
print("标签是\n",S[:,-1])
#取出特征
print("特征是\n",S[:,0:-1])
运行结果:
原始特征——标签矩阵是
[[1.51 0. ]
[1.61 1. ]
[1.76 1. ]
[2.1 1. ]
[1.58 0. ]
[1.68 1. ]]
标签是
[0. 1. 1. 1. 0. 1.]
特征是
[[1.51]
[1.61]
[1.76]
[2.1 ]
[1.58]
[1.68]]
请注意,标签都是位于该矩阵的最后一列,因此我们用到了之前讲过的数组(矩阵)取列的写法:
[ ]以冒号逗号(即:,)开头,表示取列元素,因此S[:,-1]就是从右开始数的第1列,也就是标签。
再看本例中取特征的写法是S[:,0:-1],表示从左开始数直到最右边第1列的左列为止(如果不理解,请回看:杨桃的Python进阶讲座16——数组array(六)一维数组和二维数组的索引和取值),貌似直接写S[:,0]也没问题?
需要说明,本例只有一个特征列,实际应用中往往是多个特征列对应一个标签,因此这里取特征的写法S[:,0:-1]是通用的写法。
总结
标签,是对某人某事物的凭经验的分类 。
某种可以量化为数字的指标,叫做特征。
通常把标签改为0/1/2这样的数字便于计算机处理。
可以把标签和特征配对形成:特征——标签矩阵,一般来说,标签都是位于该矩阵的最后一列。
利用Python实现特征——标签矩阵S,S[:,-1]表示标签,S[:,0:-1]表示特征。
本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!