打卡任务
本次打卡学习了解机器学习的三大主要任务,对应开源学习包中CH2的导论,1.1,1.2,1.3
1.导论
- 什么是机器学习? ,机器学习可看成是理解数据的一种方法,发现数据中的规律,对数据进行分析和预测;
- 数据的表达,数据通常是用一组向量进行表示,这组向量的每个向量都为一个样本,我们对数据的形式作出如下约定:
第i个样本\x_i=(x_i1,x_i2,…,x_ip,y_i)T,i=1,…,N
因变量\y=(y_1,y_2,…,y_N)T
第k个特征:\x(k)=(x_1k,x_2k,…,x_Nk)T
特征矩阵X=(x_1,x_2,…,x_N)T,其中一行表示一个样本,一列表示一种特征; - 有监督学习与无监督学习 ,根据数据是否有因变量进行分别
有监督学习的目的是利用某些特征来估计因变量,例如利用影响房价的一些因素来对房价进行预测,用电预测等
无监督学习的目的是学习数据本身的结构和关系。例如企业通过收集与分析消费者社会属性、生活习惯等进行客户画像分析,对客户进行分类; - 回归和预测根据因变量是否连续,有监督学习又分为回归和预测;
- 相关科学计算包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use("ggplot")#用style来设置plt风格
import seaborn as sns#Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表
1.1回归
数据中因变量为波士顿房价Price是一个连续型变量,为一个回归的例子。
利用sklearn内置数据集Boston房价数据集分析
sklearn中所有内置数据集都封装在datasets对象内:返回的对象有:
data:特征X的矩阵(ndarray)
target:因变量的向量(ndarray)
feature_names:特征名称(ndarray)
1.生成数据
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()
boston_data即构成了我们要进行分析的数据。
2.选取一个特征,分析其于因变量的关系
sns.scatterplot(boston_data['NOX'],boston_data['Price'],color='r',alpha=0.6)
plt.title('Price~NOX')
plt.show()
例如选取NOX,可以看出随着NOX的数值变大,Price的数值在变小。NOX对房价的影响是负面的。
sns.scatterplot(boston_data['CHAS'],boston_data['Price'],color='r',alpha=0.6)
plt.title('Price~CHAS')
plt.show()
CHAS特征只有两类,在河边为1,不在为0,可以看出CHAS=1时,PRICE分布较集中,处于中间房价的较多。
1.2分类
用鸢尾花数据集进行分析
1.准备分析数据
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()
2.可视化特征
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)"],alpha=0.8,label=c,marker=marker[c])#枚举
plt.xlabel('sepal length(cm)')
plt.ylabel('sepal width(cm)')
plt.legend()
plt.show()
每种不同的颜色和点的样式为一种类型的鸢尾花,数据集有三种不同类型的鸢尾花。因此因变量是一个类别变量,因此通过特征预测鸢尾花类别的问题是一个分类问题
1.3无监督学习
我们可以使用sklearn生成符合自身需求的数据集,下面我们用其中几个函数例子来生成无因变量的数据集:
https://scikit-learn.org/stable/modules/classes.html?highlight=datasets#module-sklearn.datasets
#生成月牙型非凸集
from sklearn import datasets
x,y=datasets.make_moons(n_samples=2000,shuffle=True,noise=0.05,random_state=None)#shuffle指是否随机
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()
总结
对用sklearn函数生成符合自身需求的数据集不是很熟练