一、机器学习的概述
机器学习是入门人工智能必修的一科,说实话来说也就是我们的算法。这机器学习中我们一般分为两类:
- 监督学习: 给定某些特征去估计因变量,即因变量存在的时候,我们称这个机器学习任务为有监督学习。如:我们使用房间面积,房屋所在地区,环境等级等因素去预测某个地区的房价。
- 无监督学习: 给定某些特征但不给定因变量,建模的目的是学习数据本身的结构和关系。如:我们给定某电商用户的基本信息和消费记录,通过观察数据中的哪些类型的用户彼此间的行为和属性类似,形成一个客群。注意,我们本身并不知道哪个用户属于哪个客群,即没有给定因变量。
后面我们还可以继续加上机器学习的扩展: 深度学习、强化学习。
至于什么是监督学习和非监督学习我们是根据他们是否有目标(也就是结果)
在这一块内容中,我觉得西瓜书(其中详细介绍机器的)是入门机器学习的神书了,有想法的人可以买来看看。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spmiR22T-1615813860544)(attachment:image.png)]
#导入一些有必要的科学计算与可视化的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline plt.style.use("ggplot") #使用可视化风格比较好的类型 import seaborn as sns
1.1 、回归
首先,我们先来看看有监督学习中回归的例子,我们使用sklearn内置数据集Boston房价数据集。
sklearn中所有内置数据集都封装在datasets对象内: 返回的对象有:
- data:特征X的矩阵(ndarray)
- target:因变量的向量(ndarray)
- feature_names:特征名称(ndarray
在这里我们将使用sklearn中自带的波士顿房价数据集进行描述回归问题
from sklearn import datasets boston = datasets.load_boston() # 返回一个类似于字典的类 X = boston.data y = boston.target features = boston.feature_names boston_data = pd.DataFrame(X,columns=features)
boston_data.head()
CRIM | ZN | INDUS | CHAS | NOX | RM | AGE | DIS | RAD | TAX | PTRATIO | B | LSTAT | |
0 | 0.00632 | 18.0 | 2.31 | 0.0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1.0 | 296.0 | 15.3 | 396.90 | 4.98 |
1 | 0.02731 | 0.0 | 7.07 | 0.0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2.0 | 242.0 | 17.8 | 396.90 | 9.14 |
2 | 0.02729 | 0.0 | 7.07 | 0.0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2.0 | 242.0 | 17.8 | 392.83 | 4.03 |
3 | 0.03237 | 0.0 | 2.18 | 0.0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3.0 | 222.0 | 18.7 | 394.63 | 2.94 |
4 | 0.06905 | 0.0 | 2.18 | 0.0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3.0 | 222.0 | 18.7 | 396.90 | 5.33 |
features
array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
boston_data["Price"] = y boston_data.head()
CRIM | ZN | INDUS | CHAS | NOX | RM | AGE | DIS | RAD | TAX | PTRATIO | B | LSTAT | Price | |
0 | 0.00632 | 18.0 | 2.31 | 0.0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1.0 | 296.0 | 15.3 | 396.90 | 4.98 | 24.0 |
1 | 0.02731 | 0.0 | 7.07 | 0.0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2.0 | 242.0 | 17.8 | 396.90 | 9.14 | 21.6 |
2 | 0.02729 | 0.0 | 7.07 | 0.0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2.0 | 242.0 | 17.8 | 392.83 | 4.03 | 34.7 |
3 | 0.03237 | 0.0 | 2.18 | 0.0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3.0 | 222.0 | 18.7 | 394.63 | 2.94 | 33.4 |
4 | 0.06905 | 0.0 | 2.18 | 0.0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3.0 | 222.0 | 18.7 | 396.90 | 5.33 | 36.2 |
我们可以看到,数据给定任务所需要的因变量,因变量为波士顿房价Price是一个连续型变量,所以这
是一个回归的例子。
各个特征的相关解释:
CRIM:各城镇的人均犯罪率
ZN:规划地段超过25,000平方英尺的住宅用地比例
INDUS:城镇非零售商业用地比例
CHAS:是否在查尔斯河边(=1是)
NOX:一氧化氮浓度(/千万分之一)
RM:每个住宅的平均房间数
AGE:1940年以前建造的自住房屋的比例
DIS:到波士顿五个就业中心的加权距离
RAD:放射状公路的可达性指数
TAX:全部价值的房产税率(每1万美元)
PTRATIO:按城镇分配的学生与教师比例
sns.scatterplot(boston_data['NOX'],boston_data['Price'],color="r",alpha=0.6) plt.title("Price~NOX") plt.show()
1.2 、分类
对于分类的例子我们使用鸢尾花数据集进行探测
from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target features = iris.feature_names iris_data = pd.DataFrame(X,columns=features) iris_data['target'] = y iris_data.head()
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | target | |
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | 0 |
4 | 5.0 | 3.6 | 1.4 | 0.2 | 0 |
# 可视化特征 marker = ['s','x','o'] for index,c in enumerate(np.unique(y)): plt.scatter(x=iris_data.loc[y==c,"sepal length (cm)"],y=iris_data.loc[y==c,"sepal width (cm)"]) plt.xlabel("sepal length (cm)") plt.ylabel("sepal width (cm)") plt.legend() plt.show()
我们可以看到:每种不同的颜色和点的样式为一种类型的鸢尾花,数据集有三种不同类型的鸢尾花。
因此因变量是一个类别变量,因此通过特征预测鸢尾花类别的问题是一个分类问题。