skleran库学习

LR

sklearn学习-linear_model.LinearRegression

方法:
- score(X, y[,]sample_weight) 返回对于以X为samples,以y为target的预测效果评分。
liner-regression里面介绍了R^2^的计算方法。说明测试集里面过score分数的y都可以通过模型解释。

Pipeline

可以将许多算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流。主要带来两点好处:
1. 直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。
2. 可以结合grid search对参数进行选择

可放在Pipeline中的步骤可能有:
- 特征标准化是需要的,可作为第一个环节,例如数据标准化
- 既然是分类器,classifier也是少不了的,自然是最后一个环节
- 中间可加上比如数据降维(PCA),或其他数据方法

StandardScaler
作用:去均值和方差归一化。且是针对每一个特征维度来做的,而不是针对样本。

sklearn.preprocessing.==PolynomialFeatures==。生成多项式特征1,x,x^2^利用这个类可以轻松的将x扩展为X向量,下面是它的使用方法:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> X_train = [[1],[2],[3],[4]]
>>> quadratic_featurizer = PolynomialFeatures(degree=2)
>>> X_train_quadratic = quadratic_featurizer.fit_transform(X_train)
>>> print(X_train_quadratic)
[[ 1  1  1]
 [ 1  2  4]
 [ 1  3  9]
 [ 1  4 16]]

数据划分

Sklearn-train_test_split随机划分训练集和测试集
- train_data:所要划分的样本特征集
- train_target:所要划分的样本结果
- test_size:样本占比,如果是整数的话就是样本的数量
- random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

lr.predict(x)和lr.predict_proba(x)

predict返回的是一个值,predict_proba返回你测试集中每个测试样例,分类为每个类的概率。返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。

代码讲的是使用==LR==对鸢尾花分类(3分类),skleran库中lr对多分类的处理方法
- In the multiclass case, the training algorithm uses a one-vs.-all (OvA) scheme, rather than the “true” multinomial LR

class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True,intercept_scaling=1, class_weight=None, random_state=None)
##penalty : string, ‘l1’ or ‘l2’  惩罚项的类型 

决策树:

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, 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衡量分类的质量,默认的是基尼指数
##splitter,在节点选择分类的策略,默认best。
##DecisionTreeClassifier不支持输入文本属性和文本标签,因此需要将XY转换成数字矩阵传给fit()

随机森林

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
##参数:
##n_estimators : integer, optional (default=10)---The number of trees in the forest.
##bootstrap=True:是否有放回的采样。
### max_features:随机森林允许单个决策树使用特征的最大数量。

GBM

(Gradient Boosting Machine)
GBM主要思想是基于之前建立的基学习器的损失函数的梯度下降方向来建立下一个新的基学习器,目的就是希望通过集成这些基学习器使得模型总体的损失函数不断下降,模型不断改进。

总的来说GBM的参数可以被归为三类:
1. 树参数:调节模型中每个决定树的性质
2. Boosting参数:调节模型中boosting的操作
3. 其他模型参数:调节模型总体的各项运作

树参数:

  • min_ samples_split 定义了树中一个节点所需要用来分裂的最少样本数。
    可以避免过度拟合(over-fitting)。如果用于分类的样本数太小,模型可能只适用于用来训练的样本的分类,而用较多的样本数则可以避免这个问题。
    但是如果设定的值过大,就可能出现欠拟合现象(under-fitting)。因此我们可以用CV值(离散系数)考量调节效果。
  • min_ samples_leaf
    定义了树中终点节点所需要的最少的样本数。
    同样,它也可以用来防止过度拟合。
    在不均等分类问题中(imbalanced class problems),一般这个参数需要被设定为较小的值,因为大部分少数类别(minority class)含有的样本都比较小。
  • min_ weight_ fraction_leaf
    和上面min_ samples_ leaf很像,不同的是这里需要的是一个比例而不是绝对数值:终点节点所需的样本数占总样本数的比值。
    2和3只需要定义一个就行了
  • max_ depth
    定义了树的最大深度。
    它也可以控制过度拟合,因为分类树越深就越可能过度拟合。
    当然也应该用CV值检验。
  • max_ leaf_ nodes
    定义了决定树里最多能有多少个终点节点。
    这个属性有可能在上面max_depth里就被定义了。比如深度为n的二叉树就有最多2^n个终点节点。
    如果我们定义了max_ leaf_ nodes,GBM就会忽略前面的max_depth。
  • max_ features
    决定了用于分类的特征数,是人为随机定义的。
    根据经验一般选择总特征数的平方根就可以工作得很好了,但还是应该用不同的值尝试,最多可以尝试总特征数的30%-40%.
    过多的分类特征可能也会导致过度拟合。

boosting的参数:

  • learning_ rate
    这个参数决定着每一个决定树对于最终结果(步骤2.4)的影响。GBM设定了初始的权重值之后,每一次树分类都会更新这个值,而learning_ rate控制着每次更新的幅度。
    一般来说这个值不应该设的比较大,因为较小的learning rate使得模型对不同的树更加稳健,就能更好地综合它们的结果。
  • n_ estimators
    定义了需要使用到的决定树的数量(步骤2)
    虽然GBM即使在有较多决定树时仍然能保持稳健,但还是可能发生过度拟合。所以也需要针对learning rate用CV值检验。
  • subsample
    训练每个决定树所用到的子样本占总样本的比例,而对于子样本的选择是随机的。
    用稍小于1的值能够使模型更稳健,因为这样减少了方差。
    一把来说用~0.8就行了,更好的结果可以用调参获得。
    好了,现在我们已经介绍了树参数和boosting参数,此外还有第三类参数,它们能影响到模型的总体功能:
  • loss
    指的是每一次节点分裂所要最小化的损失函数(loss function)
    对于分类和回归模型可以有不同的值。一般来说不用更改,用默认值就可以了,除非你对它及它对模型的影响很清楚。
  • init
    它影响了输出参数的起始化过程
    如果我们有一个模型,它的输出结果会用来作为GBM模型的起始估计,这个时候就可以用init
  • random_ state
    作为每次产生随机数的随机种子
    使用随机种子对于调参过程是很重要的,因为如果我们每次都用不同的随机种子,即使参数值没变每次出来的结果也会不同,这样不利于比较不同模型的结果。
    任一个随即样本都有可能导致过度拟合,可以用不同的随机样本建模来减少过度拟合的可能,但这样计算上也会昂贵很多,因而我们很少这样用
  • GBM参数调节
对于如何调参,网上已经有人整理了一套方法,简易思路如下:
step 1: 选择一个相对来说稍微高一点的learning rate,一般默认的值是0.1step 2: 基于当前的learning rate,调整决策数数量,即基学习器的数量;

step 3: 基于当前的learning rate和基学习器数量,调整决策树的参数;

step 3.1: 调节max_depth 和 num_samples_split;

step 3.2: 调节min_samples_leaf;

step 3.3:调节max_features;

step 4: 调整子样本比例subsample,再降低learning rate并响应地提高基学习器个数;

XGBoost

参数,主要分为三种:
1. General Parameters: 控制总体的功能
2. Booster Parameters: 控制单个学习器的属性
3. Learning Task Parameters: 控制调优的步骤

xgboost.train(params,dtrain,num_boost_round=10,evals=(),obj=None,feval=None,maximize=False,early_stopping_rounds=None,
evals_result=None,verbose_eval=True,learning_rates=None,xgb_model=None)
##params:字典类型,里面包含着训练中的参数关键字和对应的值
##num_boost_round 这是指提升迭代的个数
##evals 这是一个列表,用于对训练过程中进行评估列表中的元素。形式是evals = [(dtrain,’train’),(dval,’val’)]或者是evals = [(dtrain,’train’)],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果。
##obj,自定义目的函数
##feval,自定义评估函数

##示例
param = {'max_depth': 3, 'eta': 0.1, 'silent': 1, 'objective': 'binary:logistic'} 
watchlist = [(data_test, 'eval'), (data_train, 'train')]
n_round = 7
bst = xgb.train(param, data_train, num_boost_round=n_round, evals=watchlist, obj=log_reg, feval=error_rate)

SVM

class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’, coef0=0.0, shrinking=True, 
probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
##参数:
##C:惩罚参数,C值大时,对误分类的惩罚增大,C值小时,对误分类的惩罚减小。
##kernel:核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 
##degree多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
##gamma:rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features
##decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

聚类

make_blobs模块
scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果

sklearn.datasets.make_blobs(n_samples=100, n_features=2,centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)[source]

##参数:
## n_samples是待生成的样本的总数。
## n_features是每个样本的特征数。
## centers表示类别数。
## cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]。
## random_state随机数种子##不太懂

k-means

class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm=’auto’)
##参数:
##n_clusters生成的聚类数,即产生的质心(centroids)数
##init此参数指定初始化方法,默认值为 ‘k-means++
##k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛

聚类效果衡量标准:
有监督时:
1. 均一性sklearn.metrics.homogeneity_score
2. 完整性sklearn.metrics.completeness_score,
3. 还有二者的加权平均v_measure_score,
4. ARI(Adjusted Rand index(调整兰德指数)(ARI)) sklearn.metrics.adjusted_rand_score,
5. AMI sklearn.metrics.adjusted_mutual_info_score

ARI取值范围为[−1,1],值越大意味着聚类结果与真实情况越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。AMI使用与ARI相同的几号,但是用的是信息熵。

h = metrics.homogeneity_score(y, y_hat)
c = metrics.completeness_score(y, y_hat)
v = metrics.v_measure_score(y, y_hat)
print('同一性(Homogeneity):', h)
print('完整性(Completeness):', c)
print('V-Measure:', v)

学习矢量量化
AP聚类
MeanShift聚类


评价标准sklearn.metrics里面的函数
accuracy_score函数。

猜你喜欢

转载自blog.csdn.net/qq_23069955/article/details/80607084