机器学习的基本认知
机器学习是一个用数学模型理解数据的过程,在理解数据的过程中通过对模型参数的不断调整来实现对数据特征的一种刻画,这种刻画一方面是对数据信息的一种集中和筛选,另一方面可以被用来对具有类似数据特征的事件进行预测。
机器学习所利用的数据通常由一组向量组成,这组向量中的每个向量都是一个样本,每个向量共p+1个维度,前p个维度的每个维度我们称为一个特征,最后一个维度 𝑦𝑖 我们称为因变量(响应变量)。根据数据是否有因变量。机器学习可分为有监督学习和无监督学习。在有监督学习中,又可根据因变量是连续型变量或离散型变量而分为回归和分类。对无监督学习而言,建模的主要目的是去学习数据本身的结构关系,根据寻找到的结构关系对数据进行划分等其他操作。
一般使用scikit-learn简称sklearn工具库来探索机器学习项目
1.回归
有监督学习中回归的例子,使用sklearn内置数据集Boston房价数据集。sklearn中所有内置数据集都封装在datasets对象内: 返回的对象有:
- data:特征X的矩阵(ndarray)
- target:因变量的向量(ndarray)
- feature_names:特征名称(ndarray)
# 引入相关科学计算包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use("ggplot")
import seaborn as sns
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["Price"] = y
boston_data.head()
sns.scatterplot(boston_data['NOX'],boston_data['Price'],color="r",alpha=0.6)# alpha参数应该是控制图示红点的深浅
plt.title("Price~NOX")
plt.show()
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()
# 可视化特征
marker = ['s','x','o']
for index,c in enumerate(np.unique(y)):#np.unique,去除数组中重复的数字,排序后输出 #enumerate生成器,同时生成索引和值
plt.scatter(x=iris_data.loc[y==c,"sepal length (cm)"],y=iris_data.loc[y==c,"sepal width (cm)"],alpha=0.8,label=c,marker=marker[c])
plt.xlabel("sepal length (cm)")
plt.ylabel("sepal width (cm)")
plt.legend()
plt.show()
每种不同的颜色和点的样式为一种类型的鸢尾花,数据集有三种不同类型的鸢尾花。因此因变量是一个类别变量,因此通过特征预测鸢尾花类别的问题是一个分类问题。
3.无监督学习
可以使用sklearn生成符合自身需求的数据集
sklearn类和函数的参考网页
# 生成月牙型非凸集
from sklearn import datasets
x, y = datasets.make_moons(n_samples=2000, shuffle=True,
noise=0.05, random_state=None)
for index,c in enumerate(np.unique(y)):
plt.scatter(x[y==c,0],x[y==c,1],s=7)
plt.show()
# 生成符合正态分布的聚类数据
from sklearn import datasets
x, y = datasets.make_blobs(n_samples=5000, n_features=2, centers=3)
for index,c in enumerate(np.unique(y)):
plt.scatter(x[y==c, 0], x[y==c, 1],s=7)
plt.show()