4scikit-learn实现数据的分析

SciPy是一个常用的开源Python科学计算工具包,开发者针对不同领域的特性发展了众多的SciPy分支,统称为scikits,其中以scikit-learn最为著名,经常被运用在数据挖掘建模以及机器学习领域。
一.分类方法
1.Logistic回归
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

scikit-learn中的Logistic回归在sklearn.linear_model.LogisticRegression类中实现,支持二分类(binary)、一对多分类(one vs rest)以及多项式回归,并且可以选择L1或L2正则化。
从 Warning 信息中得知,原因是 sklearn 的新版本中,OneHotEncoder 的输入必须是 2-D array,而 data_train[‘Fare’] 返回的 Series 本质上是 1-D array,所以要将
df[‘Fare_scaled’] = scaler.fit_transform(data_train[‘Fare’])
改成
df[‘Fare_scaled’] = scaler.fit_transform(data_train[[‘Fare’]])
也就是在data_train[[‘Fare’]]外面再加一个[]

2.SVM
SVC、NuSVC、LinearSVC都能够实现多元分类,其中SVC和NuSVC比较接近,两者的参数略有不同,LinearSVC如其名字所写,仅支持线性核函数的分类。
SVC、NuSVC、LinearSVC示例:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

3个参数获取clf1的支持向量:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

support_vectors_参数获取支持向量机的全部支持向量,support_参数获取支持向量的索引,n_support_获取每一个类别的支持向量的数量。

3.Nearest neighbors
scikit-learn实现了两种不同的最近邻分类器KNeighbordClassifier和RadiusNeighborsClassifier。其中,KNeighborsClassifier基于每个查询点的k个最近邻实现,k是用户指定的整数值;RadiusNeighborsClassifier基于每个查询点的固定半径r内的邻居数量实现,r是用户指定的浮点数值。两者相比,前者的应用更多。
最近邻分类示例:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

4.Decision Tree
scikit-learn用tree.DecisionTreeClassifier实现了决策树分类,支持多分类。
决策树分类示例:
4scikit-learn实现数据的分析

5.随机梯度下降
在scikit-learn中,linear_model.SGDClassifier类实现了简单的随机梯度下降分类拟合线性模型,支持不同的loss functions(损失函数)和penalties for classification(分类处罚)。
随机梯度下降分类示例:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

SGDRegressor初始化的时候没有加()
4scikit-learn实现数据的分析

6.高斯过程分类
gaussian_process.GaussianProcessClassifier类实现了一个用于分类的高斯过程。
4scikit-learn实现数据的分析

7.神经网络分类(多层感知器)
neural_network.MLPClassifier类实现了通过反向传播进行训练的多层感知器(MLP)算法。
MLP分类示例:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

目前MLPClassifier只支持交叉熵损失函数,通过运行predict_proba方法进行概率估计。MLP算法使用的是反向传播的方式,通过反向传播计算得到的梯度和某种形式的梯度下降进行训练。对于分类来说,它最小化交叉熵损失函数,为每个样本给出一个向量形式的概率估计。
8.朴素贝叶斯示例
scikit-learn支持高斯朴素贝叶斯,多项分布朴素贝叶斯与伯努利朴素贝叶斯算法,分别由naive_bayes.GaussianNB、naive_bayes.MultinomialNB与naive_bayes.NernoulliNB几个类实现。
朴素贝叶斯示例:
4scikit-learn实现数据的分析
MultinomialNB、BernoulliNB和GaussianNB还提供了partial_fit方法用于加载数据以解决大数据量的问题。与fit方法不同,首次调用partial_fit方法需要传递一个所有期望的类标签的列表。

二.回归方法
1.最小二乘法
linear_model.LinearRegression实现了普通的最小二乘法。
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

diabetes数据集中含有442条包括10个特征的数据。

2.岭回归
linear_model.Ridge类实现的岭回归通过对系数的大小施加惩罚来改进最普通的最小二乘法。
岭回归示例:
4scikit-learn实现数据的分析
Ridge类有五种优化方案,通过solver参数指定,可选择auto、svd、cholesky、lsqr、sparse_cg、sag或saga,默认为auto,即自动选择。

3.Lasso
Lasso是估计稀疏系数的线性模型,在某些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少了所依赖变量的数量。scikit-learn实现的linear_model.Lasso类使用了坐标下降算法来拟合系数。
Lasso示例:
4scikit-learn实现数据的分析
在scikit-learn中还有一个使用LARS(最小角回归)算法的Lasso模型。
LassoLars示例:
4scikit-learn实现数据的分析

4.贝叶斯岭回归
linear_model.BayesianRidge实现了贝叶斯岭回归,能在回归问题的估计过程中引入参数正则化,得到的模型与传统的岭回归也比较相似。
贝叶斯岭回归示例:
4scikit-learn实现数据的分析
虽然因贝叶斯框架的缘故,贝叶斯岭回归得到的权值与普通最小二乘法得到的有所区别,但是贝叶斯岭回归对病态问题(ill-posed)的鲁棒性相对要更好一些。

5.决策树回归
决策树用于回归问题时与用于分类时类似,scikit-learn中的tree.DecisionTreeRegressor类实现了一个用于回归的决策树模型。
决策树回归示例:
4scikit-learn实现数据的分析

6.高斯过程回归
gaussian_process.GaussianProcessRegressor类实现了一个用于回归问题的高斯过程。
高斯过程回归示例:
4scikit-learn实现数据的分析

7.最近邻回归
最最近邻分类一样,scikit-learn实现了两种最近邻回归KNeighborsRegressor和RadiusNeighborsRegressor,分别基于每个查询点的k个最近邻、每个查询点的固定半径r内的邻点数量实现。
最近邻回归示例:
4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

与最近邻分类器类似,用户也可以通过n_neighbors与radius两个参数来设置k与r的值,通过weights参数对近邻进行加权,选择uniform、distance或直接自定义一个函数。

三.聚类方法
1.K-means
在scikit-learn中实现K-means算法的类有两个,其中cluster.KMeans类实现了一般的K-means算法,cluster.MiniBatchKMeans类实现了K-means的小批量变体,在每一次迭代时进行随机抽样,减少了计算量、减少了计算时间,而最终聚类结果与正常的K-means算法相比差别不大。
K-means聚类示例:

4scikit-learn实现数据的分析
4scikit-learn实现数据的分析

两种K-means实现在使用时都需要通过n_clusters指定聚类的个数,如果不指定,则默认为8.
如果给定足够的时间,K-means算法总能够收敛,但有可能得到的是局部最小值,而质心初始化的方法将对结果产生较大的影响。通过init参数可以指定聚类质心的初始化方法,默认为“k-means++”,使用一种比较智能的方法进行初始化,各个初始化质心彼此相距较远,能加快收敛速度;也可以选择random或指定为一个ndarray,即初始化为随机的质心或直接初始化为一个用户自定义的质心。另外,指定n_init参数也可能改善结果,算法将初始化n_init次,并选择结果最好的一次作为最终结果(默认为3次)。

2.Affinity propagation
Affinity propagation算法通过在样本对之间发送信息(吸引信息与归属信息)直到收敛来创建聚类,使用少量示例样本作为聚类中心。在scikit-learn中使用cluster.AffinityPropagation实现了AP聚类算法。
Affinity propagation聚类示例:
4scikit-learn实现数据的分析

3.Mean-shift
Mean-shift(均值漂移)算法与K-means一样也是基于质心的算法,但是此算法会自动设定聚类个数。
4scikit-learn实现数据的分析

4.Spectral clustering
Spectral clustering可视为K-means的低维版,适用于聚类较少时,对于聚类较多的情况不适用。
Spectralclustering示例:
4scikit-learn实现数据的分析

5.Hierarchical clustering
Hierarchical clustering(层次聚类)是一个常用的聚类算法,通过将数据进行不断地分割或合并来构建聚类。cluster.AgglomerativeClustering类实现了自下而上的层次聚类,由单个对象的聚类逐渐合并并得到最终聚类。
层次聚类示例:
4scikit-learn实现数据的分析

6.DBSCAN
DBSCAN算法将聚类视为被低浓度区域分隔的高浓度区域,其核心概念是core samples,即位于高密度区域的样本。因此一个聚类可视为一组核心样本和一组接近核心样本的非核心样本,其中核心样本之间彼此接近。
DBSCAN示例:
4scikit-learn实现数据的分析

7.Birch
Birch为提供的数据构建一棵聚类特征树(CFT)。数据实际上被有损压缩成一组聚类特征结点(CF Nodes),在结点中有一部分子聚类被称为聚类特征子聚类(CF Subclusters),并且这些位于非终端位置的CF Subclusters可以拥有聚类特征结点作为子结点。
Birch示例:
4scikit-learn实现数据的分析