1.调用sklearn数据集:小数据集用load_xx(),大数据集用fetch_xx().
2. 生成数据集
2.1 用sklearn.datasets.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表示数据点中心,可以输入int数字,代表有多少个中心,也可以输入几个坐标(fixed center locations)
- cluster_std表示分布的标准差
2.2 用sklearn.datasets.make_classification来生成数据,通常用于分类算法
1 2 3 4 |
|
- n_features :特征个数= n_informative() + n_redundant + n_repeated
- n_informative:多信息特征的个数
- n_redundant:冗余信息,informative特征的随机线性组合
- n_repeated :重复信息,随机提取n_informative和n_redundant 特征
- n_classes:分类类别
- n_clusters_per_class :某一个类别是由几个cluster构成的
2.3用sklearn.datasets.make_gaussian和make_hastie_10_2来生成数据
1 2 |
|
利用高斯分位点区分不同数据
1 |
|
利用Hastie算法,生成二分类数据
2.4用sklearn.datasets.make_circles和make_moons来生成数据
生成环线数据
1 2 |
|
factor:外环和内环的尺度因子<1
1 2 |
|
生成半环图
3.想要打印出带标签的二维数组,用import padas as pd,之后用pd.DataFrame(数据集,行标签,列标签),会得到
**********************************************各种分类器**************************************************
1.MultinomialNB多项式分布分类器,是假设特征的先验概率为多项式分布:即
class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
参数:
alpha:浮点型可选参数,默认为1.0,其实就是添加拉普拉斯平滑,即为上述公式中的λ ,如果这个参数设置为0,就是不添加平滑;
fit_prior:布尔型可选参数,默认为True。布尔参数fit_prior表示是否要考虑先验概率,如果是false,则所有的样本类别输出都有相同的类别先验概率。否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior,让MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为 P ( Y = C k ) = m k / m P(Y=C_k)=m_k/mP(Y=C k)=m k /m。其中m为训练集样本总数量,m k 为输出为第k类别的训练集样本数。
class_prior:可选参数,默认为None。
GaussianNB高斯贝叶斯分类器就是先验为高斯分布的朴素贝叶斯,
三种朴素贝叶斯分类器的详细解释:
(3条消息) 【机器学习】scikit-learn朴素贝叶斯GaussianNB实例_brucewong0516的博客-CSDN博客
2.knn K近邻算法:
是一种基本分类与回归方法,其基本做法是:给定测试实例,基于某种距离度量找出训练集中与其最靠近的k个实例点,然后基于这k个最近邻的信息来进行预测
class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)
- n_neighbors:寻找的邻居数,默认是5。也就是K值
- weights:预测中使用的权重函数。可能的取值:‘uniform’:统一权重,即每个邻域中的所有点均被加权。‘distance’:权重点与其距离的倒数,在这种情况下,查询点的近邻比远处的近邻具有更大的影响力。[callable]:用户定义的函数,该函数接受距离数组,并返回包含权重的相同形状的数组。
- algorithm:用于计算最近邻居的算法:“ ball_tree”将使用BallTree,“ kd_tree”将使用KDTree,“brute”将使用暴力搜索。“auto”将尝试根据传递给fit方法的值来决定最合适的算法。注意:在稀疏输入上进行拟合将使用蛮力覆盖此参数的设置。
- leaf_size:叶大小传递给BallTree或KDTree。这会影响构造和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。默认30。
- p:Minkowski距离的指标的功率参数。当p = 1时,等效于使用manhattan_distance(l1)和p=2时使用euclidean_distance(l2)。对于任意p,使用minkowski_distance(l_p)。默认是2。
- metric:树使用的距离度量。默认度量标准为minkowski,p = 2等于标准欧几里德度量标准。
- metric_params:度量函数的其他关键字参数。
- n_jobs:并行计算数
方法:
- fit(X, y):使用X作为训练数据和y作为目标值拟合模型
- get_params([deep]): 获取此估计量的参数。
- kneighbors([X, n_neighbors, return_distance]) :查找点的K邻居。查找点的K邻居。返回每个点的邻居的索引和与之的距离
- kneighbors_graph([X, n_neighbors, mode]):计算X中点的k邻居的(加权)图
- predict(X):预测提供的数据的类标签。
- predict_proba(X):测试数据X的返回概率估计。
- score(X, y[, sample_weight]):返回给定测试数据和标签上的平均准确度
- set_params(**params):设置此估算器的参数
3.LogisticRegression ;逻辑回归:
参数详解:(3条消息) LogisticRegression - 参数说明___kingzone__的专栏-CSDN博客_logisticsregression参数
(3条消息) sklearn逻辑回归(Logistic Regression,LR)类库使用小结_sun_shengyun的专栏-CSDN博客
主要有:
正则化选择参数:penalty
penalty参数可选择的值为"l1"和"l2".分别对应L1的正则化和L2的正则化,默认是L2的正则化。
在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
优化算法选择参数:solver
solver参数决定了我们对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是:
a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快。关于SAG的理解,参考博文线性收敛的随机优化算法之 SAG、SVRG(随机梯度下降)
从上面的描述可以看出,newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
分类方式选择参数 multi_class:
multi_class参数决定了我们分类方式的选择,有 ovr和multinomial两个值可以选择,默认是 ovr。
ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
从上面的描述可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。
如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg, lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
类型权重参数 class_weight:
class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
样本权重参数 samples_weight:
由当样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。遇到这种情况,我们可以通过调节样本权重来尝试解决这个问题。调节样本权重的方法有两种,第一种是在class_weight使用balanced。第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。
在scikit-learn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight.
4.RandomForestClassifier随机森林分类:
参数详解:(3条消息) sklearn随机森林分类类RandomForestClassifier_w952470866的专栏-CSDN博客_randomforestclassifier
(3条消息) Python随机森林模型RandomForestClassifier参数说明_数据之旅的点点滴滴-CSDN博客_randomforestclassifier参数
5.DecisionTreeClassifier()决策树分类:
参数详解
(3条消息) DecisionTreeClassifier的参数说明_永胜的博客-CSDN博客_decisiontreeclassifier参数
方法:
(1)训练(拟合):fit(X, y[, sample_weight])——fit(train_x, train_y)
(2)预测:predict(X)返回标签、predict_log_proba(X)、predict_proba(X)返回概率,每个点的概率和为1,一般取predict_proba(X)[:, 1]
(3)评分(返回平均准确度):score(X, y[, sample_weight])——score(test_x, test_y)。等效于准确率accuracy_score
(4)参数类:获取分类器的参数get_params([deep])、设置分类器的参数set_params(**params)。——print(clf.get_params()) ,clf.set_params(***)
6.GradientBoostingClassifier梯度提升决策树分类器:
scikit-learn 梯度提升树(GBDT)调参小结 - 刘建平Pinard - 博客园 (cnblogs.com)
梯度提升树(GBDT)原理小结 - 刘建平Pinard - 博客园 (cnblogs.com)
7.SVM支持向量机分类器:
有监督学习算法,一种强学习器