sklearn学习笔记

sklearn简介

2007年,数据科学家大卫·库尔纳佩(David Cournapeau)等人发起了机器学习的开源项目 sklearn,至今已逾十载。到目前为止,它已成为一款非常成熟的知名机器学习框架。

sklearn 是一款开源的 Python 机器学习库,它基于 NumPy 和 SciPy,提供了大量用于数据挖掘和分析的工具,以及支持多种算法的一系列接口。 和其他开源项目类似,sklearn 也是由社区成员自发组织和维护的。与其他开源项目不同的是,sklearn 更显“保守”。但这里的“保守”并非贬义,而是意味着“可靠”。

sklearn的七个流程

数据处理

从磁盘中读取数据,并对数据进行预处理,如归一化、标准化、正则化、属性缩放、特征编码、插补缺失值、生成多项式特征等。

分割数据

将数据随机分割成三组:训练集、验证集(有时为可选项)、测试集

训练模型

针对选取好的特征,使用训练数据来构建模型,即拟合数据,寻找最优的模型参数。这里的拟合数据,主要是指使用各种机器学习算法来学习数据中的特征,拟合出损失函数最小化参数

验证模型

使用验证集的数据接入模型。我们将模型在验证集上的表现作为模型参数优化和选择的依据。常用的方法有 Holdout 验证、留一验证(leave-one-out cross-validation)等。

测试模型

在优化模型的参数以后,使用测试数据验证模型的表现,可以评估模型的泛化性能。

使用模型

正所谓“养兵千日,用兵一时”。模型训练完毕后,就该“上战场”了,在全新数据集上进行预测。 所有机器学习算法的终极价值,都体现在对新数据的预测上。过往的历史数据(即训练数据)的价值,就在于“喂养”出一个靠谱的数据预言家,对我们从未接触过的新数据做出预测,从而指导我们未来的行为方向,实现基于数据的“洞察”。

调优模型

当我们不断使用更多的数据(包括预测的新数据)时,就会得到反馈,然后根据反馈重新调整数据使用策略,包括收集更为全面的数据、使用不同的特征、调整过往模型参数等,以此来迭代优化模型。实际上,以上 1~7 可以算作一个无限循环、迭代升级的过程。

sklearn的功能

sklearn 的功能主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。

分类

简单来说,如果定性输出预测(预测变量是离散值),可称之为分类(classification),比如预测花的品类、顾客是否购买商品等。sklearn 中已实现的经典分类算法包括:支持向量机(SVM)、最近邻算法、Logisti c回归、随机森林、决策树,以及多层感知器(Multilayer Perceptron,MLP)等。

回归

相比而言,如果定量输出预测(预测变量是连续值),则称之为回归(regression),比如预测花的长势、房价的涨势等。目前 sklearn 中已经实现的回归算法包括:线性回归、支持向量回归(SVR)、岭回归、Lasso 回归、贝叶斯回归等。常见的应用场景有股价预测等。

聚类

聚类(clustering)的功能是将相似的对象自动分组。sklearn 中常用的聚类算法包括:k 均值聚类、谱聚类(spectral clustering)、均值漂移(Mean shift)等。常见的应用场景有客户细分、实验结果分组及数据压缩等。

数据降维

数据降维(dimension reduction)的目的在于,减少要考虑的随机变量的数量。sklearn中常见的数据降维算法有主成分分析(Principal Components Analysis,PCA)、特征选择(feature selection)、非负矩阵分解(non-negative matrix factorization)等。常见的应用场景包括数据压缩、模型优化等。

模型选择

模型选择是指评估与验证模型,对模型参数进行选择与平衡。sklearn 提供了很多有用的模块,可实现许多常见功能,包括模型度量(metrics)、网格搜索(grid search)、交叉验证(cross validation)等。其目的在于,通过调整模型参数来提高模型性能(预测准确度、泛化误差等)。

数据预处理

数据预处理的功能在于,把输入数据(如文本、图形图像等)转换为机器学习算法适用的数据,主要包括数据特征的提取和归一化。在 sklearn 中,常用的模块有数据预处理(preprocessing)、特征抽取(feature extraction)等。

简单示例

#!/usr/bin/env python
# coding: utf-8

# In[4]:


from sklearn.datasets import load_boston
boston = load_boston()
print(boston.data)


# In[14]:


print(boston.data.shape)
print(boston.keys())
print(boston.target.shape)
print(boston.filename)
print(boston.feature_names)
# print(boston.DESCR)


# In[19]:


import pandas as pd
data=pd.DataFrame(boston.data)
print(data.head())


# In[23]:


data.columns=boston.feature_names
data.head()


# In[24]:


# 分割数据集,但给出的数据集已经将价格去掉,就不需要手动分割了,下面只写一个分割数据的示例
X=data.drop('B',axis=1)
y=boston.target


# In[27]:


# 引入分割数据集的模块,将这个数据分成两部分,一部分用来训练,另一部分用来测试模型
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)  #test_size参数表示测试集的大小是30%,random_state参数表示数据随机

print(X_test.shape)
print(y_test.shape)
X_test


# In[30]:


# 导入训练模型模块,这里导入的是线性回归模型
from sklearn.linear_model import LinearRegression  
LR=LinearRegression()  #生成模型
LR.fit(X_train,y_train)
y_pred=LR.predict(X_test)
LR.coef_   #每个特征值的权值


# In[34]:


# 绘制真实值和预测值的散点图,红色线是标准
import matplotlib.pylab as plt
import numpy as np
plt.scatter(y_test, y_pred)
x=np.arange(0,50)
y=x
plt.plot(x,y,color='red')
plt.show()


# In[35]:


# 评估模型
from sklearn import metrics
mse = metrics.mean_squared_error(y_test, y_pred)
print(mse)

你可能感兴趣的:(python,sklearn,机器学习,python)