赞
踩
Scikit-learn(Sklearn) 是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression),降维(Dimensionality Reduction),分类(Classfication),聚类(Clustering)等方法。面临不同的机器学习问题,采用不同的方法。
Sklearn 具有如下特点:
Sklearn 安装要求 python, numpy等 在一定的版本以上
Sklearn中包含众多机器学习方法,但各种学习方法大致相同。
首先需要引入训练的数据,Sklearn自带部分数据集,也可以通过相应方法进行构造,
然后选择相应机器学习方法进行训练,训练过程中可以通过一些技巧调整参数,使得学习准确率更高。模型训练完成之后便可以预测新数据,然后我们还可以通过Matplotlib等方法来直观的展示数据。另外还可以将我们训练好的Model进行保存,方便移动到其他平台,不必重新训练。
Sklearn 提供一些标准数据,不必再从其他网站上寻找数据进行训练。例如我们上面用来训练的load_iris数据,可以很方便的返回数据特征变量和目标值。除了引入数据以外,还可以通过load_sample_images() 来引入图片
- from sklearn import datasets
-
- data = datasets.load_iris()
- # load and return the iris dataset (classification).
-
- data = datasets.load_boston()
- # load and return the boston house-prices dataset (regression)
-
- data = datasets.load_wine()
- # load and return the wine dataset(classification).
-
-
- data = datasets.load_breast_cancer()
- # load and return the breast cancer wisconsin dataset(classification)
iris:
- from sklearn import datasets
-
- iris = datasets.load_iris()
-
- iris
-
- iris_X = iris.data
- iris_y = iris.target
-
-
- # iris_X.data.shape
- # (150,5) 150 个 samples , 每个 samples 4个 features
-
- # iris_y.data.shape
- # 对应的每个 iris_X 一个特征值
除了datasets提供的 iris,boston,wine 等数据集外,还可以自己来构造一些数据帮助我们学习。
构造数据常用参数:n_samples, n_features, n_targets, noise, random_state.
构造拟合Regression数据
(拟合分为线性拟合,非线性拟合等,得到的是最接近的结果,看总体效果,不必经过每一个点;插值是用多项式拟合,要经过每一个点)
- from sklearn.datasets import make_regression
-
- X, y = datasets.make_regression(n_samples=100,
- n_features=1,n_targets=1,
- noise=1,random_state=10)
-
-
- plt.figure()
- plt.scatter(X,y)
- plt.show()
拟合数据容易出现的问题
机器学习的基本问题是 利用模型对数据进行拟合, 学习的目的并非是对有限训练集进行正确预测,而是对未曾在训练集合中出现的样本能够正确预测。模型对训练集数据的误差称之为经验误差,对测试集数据的误差称之为泛化误差。模型对训练集以外的样本的预测能力就称之为模型的泛化能力,追求这种泛化能力始终是机器学习的目标。
过拟合 overfitting 和 欠拟合 underfitting 是导致模型泛化能力不高的两种常见原因,都是模型学习能力与模型复杂度之间失配的结果。
欠拟合 underfitting 常常在模型学习能力较弱,而数据复杂度较高的情况出现,此时由于模型学习能力不足,无法学习到数据集中的 ‘一般规律’,因而导致泛化能力弱。
与之相反,过拟合 overfitting 常常在模型学习能力过强的情况中出现此时的模型学习能力太强,以至于将训练集单个样本本身的特点都能捕捉到,并将其认为是‘一般规律’,同样这种情况也会导致模型的泛化能力下降。
过拟合 overfitting 与 欠拟合 underfitting 的区别在于,欠拟合在训练集合测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差。
在神经网络训练的过程中,欠拟合主要表现为输出结果的高偏差,而过拟合主要表现为输出结果的高方差。
对于 过拟合 形象的 解释:(转自b乎)
欠拟合出现原因:1.模型复杂度过低 2.数据特征量过少
欠拟合的情况比较容易克服,常见解决方法有:
1.提高模型复杂度。
2.增加新特征。
过拟合出现的原因
1.建模样本选取有误,样本数量太少,选择方法
2.样本噪声干扰过大,使得机器将部分噪声认为是特征从而扰乱了预设的分类规则
3.假设的模型无法合理存在,假设成立的条件实际上并不成立
4.参数过多,模型复杂度过高
过拟合的解决方案
1.正则化
2.数据增扩
构造blobs数据
- from sklearn.datasets.samples_generator import make_blobs
-
- X , y = make_blobs(n_samples=1000,n_features=2,centers=3)
-
- print(X.shape )
-
- plt.figure()
- plt.scatter(X[:,0],X[:,1],marker='o',label='CCCC')
- plt.xlabel('XXXX')
- plt.ylabel('YYYY')
- plt.legend()
- plt.show()
也可以自己设置固定的中心点,不同的标准差
- X , y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]],
- cluster_std=[0.2,0.2,0.2,0.2],random_state=10)
数据训练完之后得到模型,我们可以根据不同模型得到相应的属性和功能,并将其输出得到直观结果。假如通过线性回归训练之后得到线性函数 y=0.7x + 7 ,可以通过_coef 得到 模型系数,_intercept 得到模型 截距
- from sklearn import datasets
- from sklearn.linear_model import LinearRegression#引入线性回归模型
-
- ###引入数据###
- load_data=datasets.load_boston()
-
- data_X=load_data.data
- data_y=load_data.target
-
- #print(data_X.shape)
- #(506, 13)data_X共13个特征变量
-
- ###训练数据###
- model=LinearRegression()
- model.fit(data_X,data_y)
- model.predict(data_X[:5,:])#预测前5个数据
-
- ###属性和功能###
- print(model.coef_)
-
- print(model.intercept_)
数据集的标准化对于大部分机器学习算法来说都是一种常规的要求,如果单个特征没有或多或少的接近于正态分布,那么它可能并不能在项目中表现出良好的性能。
预处理 对模型评分的提升有很大的帮助。
交叉验证的基本思想是将原始数据进行分组,一部分作为训练集来训练模型,另一部分作为测试集来评价模型。交叉验证用于评估模型的预测性能,就其实训练好的模型在新数据上的表现,可以在一定程度上减少过拟合。还能从有限的数据中获取尽可能多的有效信息。
机器学习任务中,拿到数据后,我们首先会将原始数据集分为三部分:训练集、验证集和测试集。 训练集用于训练模型,验证集用于模型的参数选择配置,测试集对于模型来说是未知数据,用于评估模型的泛化能力。不同的划分会得到不同的最终模型。
以前我们是直接将数据分割成70%的训练数据和测试数据,现在我们利用K折交叉验证分割数据,首先将数据分为5组,然后再从5组数据之中选择不同数据进行训练。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。