sklearn用法总结

1.数据预处理

sklearn中数据预处理的常用函数
在这里插入图片描述

from sklearn import preprocessing

1.1标准化,均值去除和按方差比例缩放
数据集的标准化:当个体特征太过或者明显不符合高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,实现数据中心、化
1.1.1 scale零均值单位方差

from sklearn import preprocessing
import numpy as np
x=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])
x_scale=preprossing.scale(x)
print(x_scale)
x_scale.mean(aixs=0) #当aixs=0表示列的均值,当aixs=1表示行的均值
x_scale.std(axis=0)

1.1.2 StandardScaler计算训练集的平均值和标准差,以便测试数据集使用相同的变换

scaler=preprocessing.StandardScaler().fit(x)
scaler.mean_
scaler.std_
scaler.transform(x)
scaler.transform([[-1.,1.,0.]])
#transform()的作用是通过找中心和缩放等实现标准化

1.2将数据特征缩放至某一范围
另外一种标准化方法是将数据缩放至给定的最小值与最大值之间,通常是0和1之间,可用MinMaxscaler实现,或者将最大的绝对值缩放至单位大小,可用MaxAbsScaler实现。使用这种标准化方法的原因是,有时数据集的标准非常小,有时数据中有很多很多0(稀疏数据),需要保存住0元素。
1.2.1 MinMaxScaler(最小最大值标准化)
x_std=(x-x.min(axis=0))/(x.max(axis=0)-x.min(axis=0))
x_scaler=x_std/(max-min)+min

#将数据缩放至[0,1]之间,训练过程:fit_transform()
x_train=np.array([[1.,2.,1.],[1.,0.,0.],[0.,1.,-1.])
min_max_scaler=preprocessing.MinMaxScaler()
x_train_minmax=min_max_scaler.fit_transform(x_train)
#将上面得到的scale参数应用至测试数据
x_test=np.array([[-3.,-1.,4.]])
x_test_minmax=min_max_scaler.transform(x_test)
#可以使用以下方法查看scaler的属性
min_max_sclaer.scale_
min_max_scaler.min_

1.2.2 MaxAbsScaler(绝对值最大标准化)
与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。

x_train=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])
max_abs_scaler=preprocessing.MaxAbsScaler()
x_train_maxabs=max_abs_scaler.fit_transform(x_train)
x_test=np.array([[-3.,-1.,4.]])
x_test_maxabs=max_abs_scaler.transform(x_test)
max_abs_scaler.scale_

1.3正则化
当你想要计算两个样本的相似度时必不可少的一个操作,就是正则化,思想是:首先求出样本的p-范数,然后该样本的所有元素都除以该范数,这样最终使得每个样本的范数都为1。

x=[[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]
x_normalized=preprocessing.normalize(x,norm='l2')
x_normalized

1.4 one-hot编码
one-hot编码是一种对离散特征值的编码方式,在LR模型中常用到,用于给线性模型增加非线性能力。
transform()方法主要用来对特征进行转换,转换分为无信息转换和有信息转换。

data=[[0,0,3],[1,1,0],[0,1,2],[1,2,3]]
encoder=preprocessing.OneHotEncoder().fit(data)
encoder.transform(data).toarray()

2.数据集拆分

在得到训练数据集时,通常我们经常会把训练数据集进一步拆分成训练集和验证集,这样有助于我们模型参数的选取。

#作用:将数据集划分为训练集和测试集
import numpy as np
from sklearn.model_selection import train_test_split
x,y=np.arange(20).reshape((5,2)),range(5)
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=42)
'''
参数:
arrays:样本数组,包括特征向量和标签
test_size:
    float -获得多大比重的测试样本(默认:0.25)
    int -获得多少个测试样本
    train_size:同test_size
    random_state:
         int -随机种子(种子固定、实验可复现)
    shuffle -是否在分割之前对数据进行洗牌(默认True)
返回:
分割后的列表,长度=2*len(arrays),
    (train-test split)

3.定义模型

在这一步我们首先要分析自己数据的类型,搞清楚你要用什么模型来做,然后我们就可以在sklearn中定义模型了。sklearn文所有模型提供了非常相似的接口,这样使得我们可以更加快速的熟悉所有模型的用法。我们先来看看模型的常用属性和功能。

#拟合模型
model.fit(x_train,y_train)
#模型预测
model.predict(x_test)
#获得这个模型的参数
model.get_params()
#为模型进行打分
model.score(data_x,data_y)#   线性回归:R square;    分类问题:acc

3.1线性回归

from sklearn.linear_model import LinearRegression
#定义线性回归模型
model=LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)
'''
参数:
fit_intercept:是否计算截距,False:模型没有截距
normalize:当fit_intercept设置为False时,该参数被忽略。如果为真,则回归稀疏系数x将通过减去平均值并除以l2范数而归一化。
n_jobs:指定线程数
'''

在这里插入图片描述
3.2逻辑回归LR

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)
'''
penalty:使用指定正则化项(默认:l2)
dual:n_samples>n_features 取False(默认)
C:正则化强度,值越小,正则化强度越大
n_jobs:指定线程数
random_state:随机数生成器
fit_intercept:是否需要常量
'''

3.3朴素贝叶斯算法NB

from sklearn import naive_bayes
model=naive_bayes.GussianNB() #高斯
model=naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
model=naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=True,class_prior=None)
'''
文本分类问题常用MultinomialNB
参数:
alpha:平滑参数
fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
class_prior:是否指定类的先验概率,若指定则不能根据参数体调整
binarize:二值化的阈值,若为None,则假设输入由二进制向量组成
'''

3.4决策树DT

from sklearn import tree
model=tree.DecisionTreeClassifier(criterion='gini',max_depth=None,min_sample_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None,min_inpurity_decrease=0.0,min_inpurity_split=None,class_weight=None,presort=False)
'''
criterion:特征选择准则gini/entropy
max_depth:树的最大深度,None-尽量下分
min_samples_split:分裂内部节点,所需要的最小样本树
min_samples_leaf:叶子节点所需要的最小样本数
max_features:寻找最优分割点时的最大特征数
max_leaf_nodes:优先增长到最大叶子节点数
min_impurity_decrese:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
'''

3.5支持向量机

from sklearn.svm import SVC
model=SVC(C=1.0,kernel='rbf',gamma='auto')
'''
C:误差项的惩罚参数C
gamma:核相关系数。浮点数,If gamma is 'auto' then 1/n_features will be used instead
'''

3.6 k近邻算法KNN

from sklearn import neighbors
#定义KNN分类模型
model=neighbors.KNeighborsClassifier(n_features=5,n_jobs=1)#分类
model=neighbors.KNeighborsRegressor(n_neighbors=5,n_jobs=1)#回归
'''
n_neighbors:使用邻居的数目
n_jobs:并行任务数
'''

3.7 多层感知机(神经网络)

from sklearn.neural_network import MLPClassifier
#定义多层感知机分类算法
model=MLPClassifier(activation='relu',solver='adam',alpha=0.0001,hidden_layer_sizes=(5,2))
'''
hidden_layer_sizes=(5,2):hidden层2层,第一层5个神经元,第二层2个神经元),2层隐藏层,也就有3层神经网络
activation:激活函数
solver:优化算法(lbfgs,sgd,adam)
alpha:L2惩罚(正则化项)参数
'''
from sklearn.neural_network import MLPRegressor
#多层线性回归
model=MLPRegressor(activation='relu',solver='adam',alpha=0.0001,hidden_layer_sizes=(5,2))

4.模型评估与选择篇

4.1交叉验证

from sklearn.model_selection import cross_val_score
cross_val_score(model,x,y=None,scoring=None,cv=None,n_jobs=1)
'''
model:拟合数据的模型
cv:k_fold
scoring:打分参数-accuracy、f1、precision、recall、roc_auc、neg_log_loss等等
'''

4.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)
'''
model:用于fit和predict的参数
x,y:训练集的特征和标签
param_name:将被改变的参数的名字
param_range:参数的改变范围
cv:k-flod
返回值:
train_score:训练集得分
test_score:验证集得分

5.保存模型

我们可以将我们训练好的model保存到本地,或者放到线上供用户使用
5.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(X_test)

5.2 sklearn自带方法joblib

from sklearn.externals import joblib
# 保存模型
joblib.dump(model, 'model.pickle')
#载入模型
model = joblib.load('model.pickle')
  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值