机器学习的一般流程:

1、获取数据

2、数据预处理

3、数据集分拆

4、搭建模型

5、模型评估

6、模型保存

7、模型优化

接下来,以Sklearn为例,一一介绍。

1、获取数据

1.1、导入数据集:

要想使用sklearn中数据集,必须导入datasets模块:

from sklearn import datasets

iris = datasets.load_iris()

x=iris.data

y=iris.target

1.2、创建数据集:

相关接口如:make_blobs,make_classification,make_regression,make_moons

from sklearn.datasets.samples_generator import make_classification

x,y = make_classificatoin(n_samples=6,n_features=5,n_informative=2,n_redundant=2,

n_classes=2,n_cluster_per_class=2,scale=1.0,random_state=20)

2、数据预处理:

数据预处理是机器学习中不可或缺的一环,能使数据更加有效的被模型训练。

from sklearn import preprocessing

2.1、数据归一化

为了提高数据训练的速度和效率,需要在训练前对数据进行归一化。

train_data=[[1.4,2],[2.2,4],[4,5],[6,]]

scaler = preprocessing.StandardScaler().fit(train_data) #基于均值和方差的标准化

scaler = transform(train_data)

scaler = preprocessing.MinMaxScaler(feature_range=(0,1)).fit(train_data) #将特征值归一化到一个固定范围

2.2正则化

正则化的作用是防止过拟合,方法是:先求出样本范数,然后对样本所有元素除以该范数,使用每个样本的范数都为1.

x_norm = preprocessing.normalize(x,norm='l2')

2.3 Onehot独热编码

onehot编码是对离散特征值的一种编码方式。

onehot_encoder= preprocessing.OneHotEncoder().fit(data)

onehot_encoder.transform(data).toarray()

3、数据集分拆

通常在训练前会把数据集分拆成训练集和验证集, 以便我们在训练完模型后可以对模型进行验证。

from sklearn.mode_selection import train_test_split

train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3,random_state=42)

4、搭建模型

根据业务场景搜集数据,并决定采用什么样的模型。

4.1、线性回归

y=ax+b  :a is model.coef_,b is model.intercept_

from sklearn.linear_model import LinearRegression

model = LinearRegression(fit_intercept=True,normalize=False,copy_x=True,n_jobs=1)

4.2、逻辑回归

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state  =None,solver='liblinear',max_iter=100,multi_class='ovr',verbose=0,warm_start=False,n_jobs=1)

4.3 K近邻算法KNN

from sklearn import neighbors

model=neighbors.KNeighborsClassifier(n_neighbors=5,n_jobs=1)

model= neighbors.KNeighborsRegression(n_neighbors=5,n_jobs=1)

4.4 MLP(多层感知机)

from sklearn.neural_network import MLPClassifier

model = MLPClassifier(activation='relu',solver='adam',alpha=0.0001)

5、模型评估

5.1、交叉验证

from sklearn.model_selection import cross_val_score

cross_val_score(model,x,y=None,scoring=None,cv=None,n_job2=1)

5.2、检验曲线

from sklearn.model_selection import validation_curve

train_score,test_score = validation_curve(model,x,y,param_name,param_range,cv=None,scoring=None,n_jobs=1)

6、保存模型

我们可以将训练完的模型保存起来,为后续使用作准备。

6.1、保存为pickle

import pickle

with open('model.pickle','wb') as f: #保存模型

pickle.dump(model,f)

with open('model.pickle','rb') as f: #加载模型

model = pickle.load(f)

model.predict(test_x)

6.2、joblib

from sklearn.externals import joblib

joblib.dump(model,'model.pickle')  #保存模型

model= joblib.load('model.pickle') #加载模型

7、模型优化

7.1欠拟合

模型训练:

#数据集准备

from sklearn.datasets import load_boston

boston=load_boston()

x=boston.data

y=boston.target

#数据集分拆

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=3)

#模型训练与评估

import time

from sklearn.linear_model import LinearRegression

model=LinearRegression()

start=time.clock()

model.fit(x_train,y_train)

train_score=model.score(x_train,y_train)

cv_score=model.score(x_test,y_test)

print('elapse:{0:.6f} train_score:{1:0.6f} cv_score:{2:.6f}'.format(time.clock()-start,train_score,cv_score))

模型训练后,得分如下:

elapse:0.06375 train_score:0.723941  cv_score:0.794958

精度有些偏低,属于欠拟合现象。

优化方法如下:

from sklearn.linear_model import LinearRegression

from sklearn.preprocessing import PolynomialFeatures

from sklearn.pipeline import Pipeline

def polynomial_model(degree=1):

polynomial_features=PolynomialFeatures(degree=degree,include_bias=False)

linear_regression = LinearRegression(normalize=True)

pipeline=Pipeline(['polynomial_features',polynomial_features),('linear_regression',linear_regression)])

return pipeline

model = polynomial_model(degree=2)

start=time.clock()

model.fit(x_train,y_train)

train_score=model.score(x_train,y_train)

cv_score=model.score(x_test,y_test)

print('elapse:{0:.6f} train_score:{1:0.6f} cv_score:{2:.6f}'.format(time.clock()-start,train_score,cv_score))

模型训练后,新的得分如下:

elapse:0.009711 train_score:0.930547  cv_score:0.860465

改为三阶多项式后:

elapse:0.178630 train_score:1.000000  cv_score:-105.517015

训练样本分数达到了1,而测试样本的分数却是负数,说明过拟合了。

sklearn学习小结的更多相关文章

  1. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  2. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  3. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  4. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  5. pthread多线程编程的学习小结

    pthread多线程编程的学习小结  pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写     程序员必上的开发者服务平台 —— DevSt ...

  6. ExtJs学习笔记之学习小结LoginDemo

    ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  7. 点滴的积累---J2SE学习小结

    点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...

  8. (转) Parameter estimation for text analysis 暨LDA学习小结

    Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...

  9. dubbo学习小结

    dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...

随机推荐

  1. Void pointers in C

    In this article we are learning about “void pointers” in C language. Before going further it will be ...

  2. 【D3D12学习手记】The Command Queue and Command Lists

    GPU有一个命令队列,CPU通过Direct3D API将命令提交到队列里来使用命令列表(command lists),如下图.当一套命令(a set of commands)已经被提交到命令队列,他 ...

  3. 083. Remove Duplicates from Sorted List

    题目链接:https://leetcode.com/problems/rotate-list/description/ Given a sorted linked list, delete all d ...

  4. Ubuntu中安装memcache并且在Python中连接memcache

    1.安装memcache到Ubuntu. PS:依赖libevent,需要提前安装 yum install libevent-devel #centos中使用这个 apt-get install li ...

  5. Docker-Compose运行Nginx+Redis+NetCoreAPI

    Docker-Compose运行Nginx+Redis+NetCoreAPI 一.准备Docker-Compose Docker 开始安装Docker-compose之前你需要先确认已经安装了Dock ...

  6. IE11兼容IE8的设置

    我们在使用ie11浏览器的时候,有些网站的兼容性不是太好,这个时候就要设置下ie11的兼容性了.那么ie11浏览器怎么设置兼容IE8呢?下面就让小编给大家介绍一下吧. 首先我们打开电脑里面的ie11浏 ...

  7. 【Linux开发】linux设备驱动归纳总结(八):2.总线、设备和驱动的关系

    linux设备驱动归纳总结(八):2.总线.设备和驱动的关系 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. 5.写一个sh脚本,可以通过一台机器控制多台机器

    先创建一个脚步文件 对这个脚本进行编辑 [hadoop@node1 ~]$ vim xcall.sh 给脚本赋予权限 执行脚本 把脚本移动到 /usr/local/bin/目录下 [hadoop@no ...

  9. java生成0~9个9个不相等的整数

    HashSet<Integer> hs=new HashSet<Integer>(); Integer i=0; while (i<9){ int s=(int) Mat ...

  10. 2018.08.14【2018提高组】模拟A组 比赛总结

    题解 这次的A组难得得水. T1 这题我一看,就想起了GDOI的一道题--密码锁 \(O(n)\)算法--差分 于是乎兴奋地发现这道题可以用差分来解. 设\(f_i=a_i-a_{i-1}\). 然后 ...