内容简介:Scikit-learn安装sklearn库依赖于numpy、scipy、matplotlib库,首先安装numpy,然后安装scipy、matplotlib库,最后安装scikit-learn库。可以通过anaconda进行安装或者通过依赖关系,逐个进行pip install进行安装。Scikit-learn的数据集介绍
编辑推荐: |
本文来自于csdn,本文是一篇机器学习Scikit-learn的笔记,主要介绍Scikit-learn的安装和使用,希望会对您的学习有所帮助。 |
Scikit-learn安装
sklearn库依赖于numpy、scipy、matplotlib库,首先安装numpy,然后安装scipy、matplotlib库,最后安装scikit-learn库。可以通过anaconda进行安装或者通过依赖关系,逐个进行pip install进行安装。
Scikit-learn的数据集介绍
scikit-learn数据集如下图所示,包括了小数据集和大数据集,采用函数方法调用。
# 加载boston房价信息示例 from sklearn.datasets import load_boston data, target = load_boston(return_X_y=True) print(data.shape) print(target.shape)
#加载手写数字库 from sklearn.datasets import load_digits import matplotlib.pyplot as plt digits = load_digits() plt.matshow(digits.images[3]) plt.show()
sklearn库包括6大部分,包括分类、回归、聚类、降维、模型选择以及数据预处理。具体的函数如下图所示:
Sklearn无监督学习使用
无监督学习采用无标签数据,处理数据分布或者数据关系,包括聚类和降维。
聚类采用距离进行衡量样本的分类情况,可以采用欧氏距离、曼哈顿距离、马氏距离(包含了属性的标准差)、余弦相似度(向量相似度的一个方面)。
sklearn聚类算法包含于sklearn.cluster中,包含了k-means、邻近传播算法、DBSCAN等。
sklearn.cluster可以采用多种数据形式作为输入,标准形式为[样本个数 特征个数],还可以采用其他方式进行。
降维,在保证数据所具有的特征情况下,将高维数据转化为低维数据的过程,可用于数据可视化或者精简数据的作用。
sklearn降维算法包含于sklearn.decomposition,目前有7种降维算法。
聚类之kmeans方法使用
kmeans算法将数据分为k个簇,簇内相似度较高,簇间相似度较低。其操作过程如下图所示。
涉及到的过程包括:如何随机选取k个点;如何计算其余点与选取点的距离;如何计算每一类的均值;如何判断停止;如何证明有效性。
采用kmeans进行聚类操作,数据为31个身份居民家庭平均支出,包含8个维度数据,对于31个省份进行聚类。
选取数据点采用了Kmeans的初始化算法方法,由于没有数据,这里采用load_iris()数据进行分类,存在一定的分类误差,大约有0.09~0.11的分类误差。
from sklearn.cluster import KMeans from sklearn.datasets import load_iris if __name__ == '__main__': # import iris data: x is the iris feature and y is the class x, y = load_iris(return_X_y=True) # the number clusters is 3 km = KMeans(n_clusters=3,init='k-means++', max_iter=10000) label = km.fit_predict(x) # evaluate the accuracy error_cnt = 0 sum_cnt = 0 for i in range(len(label)): if (y[i] != label[i]): error_cnt =error_cnt + 1 sum_cnt = sum_cnt + 1 print("Error rate:%.2f" % (error_cnt/sum_cnt))
kmeans可以用于图像分割,即利用图像分灰度、颜色、纹理、形状等特征将图像分为若干不重叠区域,使这些特征在同一区域具有相似性而不同区域呈现冥想差异性。图像分割常用技术包括了阈值分割、边缘分割、直方图法和聚类分析、小波变换等。kmeans分割可以实现图像中相似特征聚类,从而完成分割情况。对于同一类采用相同颜色标记,最终可以形成分割图像。实例如下,一个较重要的包为PIL,实例代码如下:
import PIL.Image as image def loadData(filePath): f = open(filePath,'rb') data = [] img = image.open(f) m,n = img.size for i in range(m): for j in range(n): x,y,z = img.getpixel((i,j)) data.append([x/256.0,y/256.0,z/256.0]) f.close() return np.mat(data),m,n
聚类之DBSCAN方法使用
DBSCAN基于密度进行聚类,不需要指定聚类个数。DBSCAN算法将数据点分为三类:核心点、边界点和噪音点,这依据一点的邻域eps内其他点个数的情况是否大于minpts来决定。
算法流程如下所示,第一步包括了计算每一个点邻域eps距离内的点,超过minpts个数,则记该点为核心点;然后查看剩余点是否在邻域内,如果在则为邻域点;否则为噪声点。第二步为删除噪声点;第三步为连接距离在eps内的核心点,构成一个簇;第四步,指定边界点归类于哪一个簇。
# 统计每一类别元素个数的代码 for i in range(0,nc): numberOfClass.append(len(label[label[:] == i])) print(numberOfClass)
# 统计分类个数的代码
n_clusters = len(set(labels))-(1 if -1 in labels else 0)
# DBSCAN核心代码
db = DBSCAN(eps=1,min_samples=20).fit(x)
labels = db.labels_
DBSCAN基于密度分布进行聚类,对于iris数据难以实现有效聚类。
从 python 源码看,DBSCAN与KNN存在一定的联系。从实际操作而言,DBSCAN与kmeans均存在距离计算步骤,这也是聚类算法的一个必须步骤;对于距离情况,kmeans采取最短距离归类原则,这符合统计情况;而DBSCAN则采取一定的threshold,对于部分噪声数据可以进行过滤。
降维之PCA
PCA,主成分分析,较为常用的一种降维方法,可以用于高维数据的探索和可视化,还可以用作数据压缩和预处理。
矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的为第一主成分,其次为第二主成分。样本的PCA算法如下所示:
在sklearn库中,可以使用sklearn.decomposition.PCA进行降维,关键参数有主成分个数n_components和svd_solver。采用PCA可以对于iris数据集进行降维操作。
# 原数据为四维的,使用PCA对数据进行降维, # 实现在二维平面的可视化 import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.datasets import load_iris # 加载数据集导入函数 data = load_iris() # 以字典形式加载数据集 y = data.target # y表示数据集中的标签 X = data.data # x表示数据集中的属性数据 pca = PCA(n_components=2) # 加载pca算法,主成分数目为2 reduced_X = pca.fit_transform(X) # 对原始数据进行降维,保存在reduced_X中 red_x, red_y = [], [] blue_x, blue_y = [], [] green_x, green_y = [], [] # 按类别将降维后的数据进行保存 for i in range(len(reduced_X)): # range(5) #代表从0到5(不包含5) if y[i] == 0: red_x.append(reduced_X[i][0]) red_y.append(reduced_X[i][1]) elif y[i] == 1: blue_x.append(reduced_X[i][0]) blue_y.append(reduced_X[i][1]) else: green_x.append(reduced_X[i][0]) green_y.append(reduced_X[i][1]) # 按照鸢尾花的类别将降维后的数据点保存在不同的列表中 plt.scatter(red_x, red_y, c='r', marker='x') # 画x关于y的散点图,c:color,r:red。 # maker:标记点的形状。x:x形;D:钻石形;.:点形 plt.scatter(blue_x, blue_y, c='b', marker='D') plt.scatter(green_x, green_y, c='g', marker='.') plt.show()
降维之NMF
NMF,非负矩阵分解,是在矩阵所有元素为非负数这一条件约束情况下的矩阵分解方法。其思想为,对于一个非负矩阵,可以找到另外的矩阵W和H,这两者也是非负矩阵,使得W乘以H接近矩阵V。其中W矩阵称为基础图像矩阵,而H矩阵为系数矩阵。W矩阵类似于V矩阵中抽取的特征。
NMF的算法需要进一步进行探究,可以使用NMF方法进行,关键参数有n_components,init表示W和H矩阵的初始化方法。
实作的对象为olivetti人脸数据集,包含400张人脸数据,每张图像为64*64大小,也就是说原始的数据具有4096个维度。可以采用NMF进行降维,经过调整最终的特征个数可以为6个,也就是说降维后的数据集为400张*6个特征。(待确定)
NMF和PCA可以直接替代使用,二者参数接近。
Sklearn监督学习使用
监督学习的目标是利用一组带有标签的数据,构成一个从输入到输出的映射,然后将这种映射关系应用到未知数据,达到分类或回归的目的。
sklearn库中分类算法未被统一封装,因此其import方式各有不同,其分类算法包括了KNN,朴素贝叶斯,SVM,决策树,神经网络模型等等,既有线性分类器,也有非线性分类器。
回归分析则是用于分析多个变量的相关性,由于给出在自变量变化时,因变量的变化情况。一般而言,通过回归分析可以得到由自变量给出因变量的条件期望。
sklearn库的回归函数封装在linear_model和prepocessing中,其中线性回归函数包括线性回归、岭回归、LASSO回归,非线性回归如多项式回归等。
分类之KNN
KNN的基本思想是通过计算待分类数据与训练集数据的距离,取前K个点,将待分类数据划分到出现次数最多的那个类别。
sklearn中采用sklearn.neighbors.KNeighborsClassifier创建K近邻分类器,关键参数包括n_neighbors和weights。为了能够对于大数据进行处理,可以采用合适的计算临近点的方法。实际使用过程中,倾向于使用较小的K,并且使用交叉验证得到最优的K值。
# KNN简易代码 from sklearn.neighbors import KNeighborsClassifier x = [[0],[1],[2],[3]] y = [0,0,1,1] neigh = KNeighborsClassifier(n_neighbors=3) neigh.fit(x,y) print(neigh.predict([[1.1]]))
分类之决策树
构建过程为特征的信息增益,分类时只需要根据决策树的节点进行判断,从而得到所属类别。
sklearn可以使用sklearn.tree.DecisionTreeClassifier进行分类,参数有criterion,可以选择gini或者entropy;max_features可以选择决策树节点进行分类时,从多少个特征中选取最优特征。
其本质是一种寻找一种对特征空间的划分,从而构建一个对于训练数据拟合好,并且复杂度小的决策树。
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_validate # 默认使用gini分类,这里采用entropy分类 clf = DecisionTreeClassifier(criterion='entropy') iris = load_iris() print(cross_validate(clf,iris.data,iris.target,cv=10))
分类之朴素贝叶斯
朴素贝叶斯,naive bayes,为典型的生成学习方法,通过训练数据得到联合分布,然后求取后验概率。对于小规模、多分类任务。
在sklearn库中有以下三类贝叶斯分类器,naive_bayes.GaussianNB,分别针对高斯朴素贝叶斯、针对多项式模型的朴素贝叶斯和针对多元伯努利模型的朴素贝叶斯,其区别在于假设某一特征的观测值属于某一特定分布。
# 朴素贝叶斯示例代码 import numpy as np from sklearn.naive_bayes import GaussianNB X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) Y = np.array([1,1,1,2,2,2]) clf = GaussianNB(priors=None) clf.fit(X,Y) print(clf.predict([[-0.8,-1]]))
分类之SVM
SVM分类方法在sklearn.svm.SVC中,代码如下所示,需要设置kernel参数,例如rbf,linear,poly,sigmoid等。同时针对本分类,可以产生训练集和测试集。
from sklearn.datasets import load_iris from sklearn.model_selection import cross_validate from sklearn import svm clf = svm.SVC(kernel='rbf') x,y = load_iris(return_X_y=True) print(cross_validate(clf,x,y,cv=10))
分类之MLP
MLP,即多层全连接神经网络。对于DBRHD数据集,其大小为32*32的文本矩阵,而MLP采用向量输入,因此需要展开文本矩阵,输出采用one-hot vectors。Hidden layer的层数和神经元个数均会影响识别准确率。
clf = MLPClassifier(hidden_layer_sizes=(100,), activation='logistic', solver='adam', learning_rate_init = 0.0001, max_iter=2000) print(clf) clf.fit(train_dataSet,train_hwLabels) #read testing dataSet dataSet,hwLabels = readDataSet('testDigits') res = clf.predict(dataSet) #对测试集进行预测
数据的处理方法
sklearn提供了数据预处理模块Imputer,自动生成训练集和测试集的模块train_test_split,预测结果评估模块classification_report。注意,train_test_split已经被删除。
from sklearn.preprocessing import Imputer from sklearn.cross_validation import train_test_split from sklearn.metrics import classification_report
可以采用pandas模块读取数据文件,可以处理分隔符,缺失值且去除表头行。处理缺失值代码如下所示。这里由于存在多个分散文件,因此使用了np.concatenate进行文件数据合并。
df = pd.read_table(file, delimiter=',', na_values='?', header=None) imp = Imputer(missing_values='NaN', strategy='mean', axis=0) imp.fit(df) df = imp.transform(df) feature = np.concatenate((feature, df))
train_test_split函数可以将数据顺序打乱,而classification_report可以生成数据分类的结果准确度。
print(classification_report(y_label, y_clf_result))
对于数据,需要进行特征选择,可以借助辅助软件进行数据可视化。
对于CSV文件,可以通过pandas模块的read_csv函数进行处理,数据可以进行 排序 操作,这对于时间序列数据尤其有用。
对于时间序列函数,可以指定特定的前序时间进行特征分析,而后的时间作为结果label,如下分析所示。初始数据有200天的结果,使用前序150天作为training set。因此最终的样本包括了50条,每一条样本的数据包括了前150天的各特征,该特征是二维数组形式,因此需要进行reshape操作。
回归之线性回归和多项式回归
线性回归利用最小二乘法,对于回归方程进行求解,最终可以得到GD等多种优化迭代方法。
回归分析的关键代码如下所示,使用的函数为sklearn.linear_model.LinearRegression(),fit()用于拟合输入输出数据。
多项式回归本质也是线性回归,因为参数对于输出是线性的。对于多项式回归,sklearn提供了预处理方法,构造多项式特征。
from sklearn.prepocessing import PolynomialFeatures poly_reg = PolynomialFeatures(degree = 2) X_poly = poly_reg.fit_transform(datasets_X) lin_reg_2 = linear_model.LinearRegression() lin_reg_2.fit(X_poly, datasets_Y)
回归之岭回归
对于回归分析而言,最小二乘法的解析解存在不稳定情况。也就是存在一个转置项,由于X的某些列线性相关度较大,容易出现$X^TX$接近0。对于接近于零的情况具有不稳定性。因此可以通过引入正则项进行解决,这称为岭回归,如下图所示:
在sklearn库中,可以调用sklearn.linear_model.Ridge,参数有alpha,对应正则化因子,fit_intercept表示是否计算截距,solver指定求解器。实例中指定的alpha=1.0。
强化学习及简单游戏训练
强化学习是程序agent通过与环境不断进行交互学习,得到从环境到动作的映射,从而使得累计汇报最大化。
马尔可夫决策过程,MDP,是一种较为常用的强化学习过程,该学习方法需要获得环境的状态以及可能采取动作的状态。
现实中,对于环境的转移概率和奖励函数很难得到,因此可以采用不依赖于环境进行建模的学习算法,称为免模型学习,蒙特卡洛强化学习就是其中一类,采用多次采样获得平均的累计奖赏。更强的学习方法为Q-learning算法。
DQN: 利用深度网络,可以实现深度强化学习,得到较好的学习效果。该方法直接学习环境和动作状态函数的映射关系,得到问题的解。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用机器学习探索神经网络架构
- Kubeflow使用Kubernetes进行机器学习
- 机器学习算法基础(使用Python代码)
- 使用Kubeflow构建机器学习流水线
- 机器学习交易——如何使用回归预测股票价格?
- R中使用MLflow跟踪机器学习
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数学建模算法与应用
司守奎、孙玺菁 / 国防工业出版社 / 2011-8 / 49.00元
《数学建模算法与应用》主要内容简介:作者司守奎、孙玺菁根据多年数学建模竞赛辅导工作的经验编写《数学建模算法与应用》,涵盖了很多同类型书籍较少涉及的新算法和热点技术,主要内容包括时间序列、支持向量机、偏最小二乘面归分析、现代优化算法、数字图像处理、综合评价与决策方法、预测方法以及数学建模经典算法等内容。《数学建模算法与应用》系统全面,各章节相对独立。《数学建模算法与应用》所选案例具有代表性,注重从不......一起来看看 《数学建模算法与应用》 这本书的介绍吧!