sklearn学习小结
机器学习的一般流程:
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学习小结的更多相关文章
- flex学习小结
接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- ExtJs学习笔记之学习小结LoginDemo
ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- 点滴的积累---J2SE学习小结
点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...
- (转) Parameter estimation for text analysis 暨LDA学习小结
Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
随机推荐
- Java 谷歌浏览器开发必备插件
1.谷歌访问助手 下载网址:http://www.ggfwzs.com/ 2.Json Viewer 格式化请求接口,返回Json数据格式,可以在浏览器展示 3.Restlet client 一种类似 ...
- C++ 中set
set特点: 所有元素不会重复,重复插入已经有的新值无效: 所有元素按顺序排列:unordered_set除外 键和值相同,所以set中的值是不可更改的 set的各成员函数列表如下: 1.begin( ...
- Python浮点型数据小数点的取舍
python默认的是17位小数的精度 1.round()内置方法 π=3.1415926535 new_num=round(π,2) #四舍五入保留两位小数 print(new_num) ...
- GitLab 架构
GitLab 架构官方文档 GitLab 中文文档 版本 一般使用的是社区版(Community Edition,CE),此外还有企业版(Enterprise Edition,EE)可以使用. EE ...
- 使用Nginx压缩文件、设置反向代理缓存提高响应速度
Gzip压缩: 最开始,这个竟然要6m多(大到不寻常),响应的速度3分多钟. 所以先对返回的文件进行gzip压缩.判断返回的资源是否有使用gzip压缩,观察响应头部里面,如果没有 Content-En ...
- Django路由系统-分组命名匹配
Django路由系统 分组命名匹配 在上述基本配置示例中,使用了简单的正则表达式分组匹配来捕获URL中的值并以位置参数的形式传递给视图,例如url(r'^articles/([0-9]{4})/( ...
- umask的一般用法
常常会遇到我的Linux系统默认的八进制的umask值是0022,而我创建的文件的八进制权限却是644,这个是怎么一回事? umask值只是一个掩码,它会屏蔽掉掉不想授予该安全级别的权限. 用法是要把 ...
- 'Python.exe' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
说明python不能被调用,需要为他制定正确的路径.0=0(win10想要打开任何东西,左下角搜索框) 1.打开 python,输入import os 输入os.getcwd,得到路径. 2.打开 编 ...
- 【Linux-驱动】简单字符设备驱动结构和初始化
(1)在编写简单字符设备驱动的时候,首先要申请一个设备结构struct cdev: struct cdev { struct kobject kobj; struct module *owner; / ...
- PTA(Basic Level)1057.数零壹
给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如 ...