Python机器学习工具scikit-learn的使用笔记

时间:2022-11-06 21:46:05

scikit-learn 是基于 python 语言的机器学习工具

  • 简单高效的数据挖掘和数据分析工具
  • 可供大家在各种环境中重复使用
  • 建立在 numpy ,scipy 和 matplotlib 上
  • 开源,可商业使用 - bsd许可证

sklearn 中文文档:http://www.scikitlearn.com.cn/

官方文档:http://scikit-learn.org/stable/

sklearn官方文档的类容和结构如下:

Python机器学习工具scikit-learn的使用笔记

sklearn是基于numpy和scipy的一个机器学习算法库,设计的非常优雅,它让我们能够使用同样的接口来实现所有不同的算法调用。

sklearn库的四大机器学习算法:分类,回归,聚类,降维。其中:

  • 常用的回归:线性、决策树、svm、knn ;集成回归:随机森林、adaboost、gradientboosting、bagging、extratrees
  • 常用的分类:线性、决策树、svm、knn,朴素贝叶斯;集成分类:随机森林、adaboost、gradientboosting、bagging、extratrees
  • 常用聚类:k均值(k-means)、层次聚类(hierarchical clustering)、dbscan
  • 常用降维:lineardiscriminantanalysis、pca

     还包含了特征提取、数据处理和模型评估三大模块。
     同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。 
使用sklearn进行机器学习的步骤一般分为:导入模块-创建数据-建立模型-训练-预测五步。
以下为代码笔记

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
一、数据获取
*****************
"""
 
##1.1 导入sklearn数据集
from sklearn import datasets
 
iris = datasets.load.iris() #导入数据集
x = iris.data  #获得其特征向量
y = iris.target # 获得样本label
 
##1.2 创建数据集
from sklearn.datasets.samples_generator import make_classification
 
x, y = make_classification(n_samples=6, n_features=5, n_informative=2,
  n_redundant=2, n_classes=2, n_clusters_per_class=2, scale=1.0,
  random_state=20)
 
# n_samples:指定样本数
# n_features:指定特征数
# n_classes:指定几分类
# random_state:随机种子,使得随机状可重
 
# 查看数据集
for x_,y_ in zip(x,y):
  print(y_,end=': ')
  print(x_)
"""
0: [-0.6600737 -0.0558978  0.82286793 1.1003977 -0.93493796]
1: [ 0.4113583  0.06249216 -0.90760075 -1.41296696 2.059838 ]
1: [ 1.52452016 -0.01867812 0.20900899 1.34422289 -1.61299022]
0: [-1.25725859 0.02347952 -0.28764782 -1.32091378 -0.88549315]
0: [-3.28323172 0.03899168 -0.43251277 -2.86249859 -1.10457948]
1: [ 1.68841011 0.06754955 -1.02805579 -0.83132182 0.93286635]
"""
 
"""
*****************
二、数据预处理
*****************
"""
from sklearn import preprocessing
 
##2.1 数据归一化
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
# 1. 基于mean和std的标准化
scaler = preprocessing.standardscaler().fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
 
# 2. 将每个特征值归一化到一个固定范围
scaler = preprocessing.minmaxscaler(feature_range=(0, 1)).fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#feature_range: 定义归一化范围,注用()括起来
 
#2.2 正则化
x = [[ 1., -1., 2.],
  [ 2., 0., 0.],
  [ 0., 1., -1.]]
x_normalized = preprocessing.normalize(x, norm='l2')
 
print(x_normalized)
"""                 
array([[ 0.40..., -0.40..., 0.81...],
    [ 1. ..., 0. ..., 0. ...],
    [ 0. ..., 0.70..., -0.70...]])
"""
 
## 2.3 one-hot编码
data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
encoder = preprocessing.onehotencoder().fit(data)
enc.transform(data).toarray()
 
"""
*****************
三、数据集拆分
*****************
"""
# 作用:将数据集划分为 训练集和测试集
# 格式:train_test_split(*arrays, **options)
from sklearn.mode_selection import train_test_split
 
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)
"""
 
"""
*****************
四、定义模型
*****************
"""
## 模型常用属性和工鞥呢
# 拟合模型
model.fit(x_train, y_train)
# 模型预测
model.predict(x_test)
 
# 获得这个模型的参数
model.get_params()
# 为模型进行打分
model.score(data_x, data_y) # 线性回归:r square; 分类问题: acc
 
## 4.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:指定线程数
"""
 
## 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)
 
"""参数
---
  penalty:使用指定正则化项(默认:l2)
  dual: n_samples > n_features取false(默认)
  c:正则化强度的反,值越小正则化强度越大
  n_jobs: 指定线程数
  random_state:随机数生成器
  fit_intercept: 是否需要常量
"""
 
## 4.3 朴素贝叶斯算法nb
from sklearn import naive_bayes
model = naive_bayes.gaussiannb() # 高斯贝叶斯
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,则假设输入由二进制向量组成
"""
 
## 4.4 决策树dt
from sklearn import tree
model = tree.decisiontreeclassifier(criterion='gini', max_depth=none,
  min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
  max_features=none, random_state=none, max_leaf_nodes=none,
  min_impurity_decrease=0.0, min_impurity_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_decrease:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
"""
 
 
## 4.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.
"""
 
## 4.6 k近邻算法 knn
from sklearn import neighbors
#定义knn分类模型
model = neighbors.kneighborsclassifier(n_neighbors=5, n_jobs=1) # 分类
model = neighbors.kneighborsregressor(n_neighbors=5, n_jobs=1) # 回归
"""参数
---
  n_neighbors: 使用邻居的数目
  n_jobs:并行任务数
"""
 
## 4.7 多层感知机
from sklearn.neural_network import mlpclassifier
# 定义多层感知机分类算法
model = mlpclassifier(activation='relu', solver='adam', alpha=0.0001)
"""参数
---
  hidden_layer_sizes: 元祖
  activation:激活函数
  solver :优化算法{‘lbfgs', ‘sgd', ‘adam'}
  alpha:l2惩罚(正则化项)参数。
"""
 
 
"""
*****************
五、模型评估与选择
*****************
"""
 
## 5.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'等等
"""
 
## 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)
"""参数
---
  model:用于fit和predict的对象
  x, y: 训练集的特征和标签
  param_name:将被改变的参数的名字
  param_range: 参数的改变范围
  cv:k-fold
  
返回值
---
  train_score: 训练集得分(array)
  test_score: 验证集得分(array)
"""
 
 
"""
*****************
六、保存模型
*****************
"""
## 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(x_test)
 
 
## 6.2 sklearn方法自带joblib
from sklearn.externals import joblib
 
# 保存模型
joblib.dump(model, 'model.pickle')
 
#载入模型
model = joblib.load('model.pickle')

以上就是python机器学习工具scikit-learn的使用笔记的详细内容,更多关于python机器学习工具scikit-learn的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/aitree/p/14331551.html