Sklearn_入门

1. Sklearn简介

Scikit-learn(Sklearn) 是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression),降维(Dimensionality Reduction),分类(Classfication),聚类(Clustering)等方法。面临不同的机器学习问题,采用不同的方法。

Sklearn 具有如下特点:

  1. 简单高效的数据挖掘与分析工具
  2. 建立在Numpy,Scipy,Matplotlib之上

2.Sklearn 安装

Sklearn 安装要求 python, numpy等 在一定的版本以上

3.Sklearn 通用学习模式

Sklearn中包含众多机器学习方法,但各种学习方法大致相同。

首先需要引入训练的数据,Sklearn自带部分数据集,也可以通过相应方法进行构造,

然后选择相应机器学习方法进行训练,训练过程中可以通过一些技巧调整参数,使得学习准确率更高。模型训练完成之后便可以预测新数据,然后我们还可以通过Matplotlib等方法来直观的展示数据。另外还可以将我们训练好的Model进行保存,方便移动到其他平台,不必重新训练。

4.Sklearn datasets

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)

5.Sklearn  Model的属性和功能

数据训练完之后得到模型,我们可以根据不同模型得到相应的属性和功能,并将其输出得到直观结果。假如通过线性回归训练之后得到线性函数 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_)
 

6.Sklearn数据预处理

数据集的标准化对于大部分机器学习算法来说都是一种常规的要求,如果单个特征没有或多或少的接近于正态分布,那么它可能并不能在项目中表现出良好的性能。

预处理   对模型评分的提升有很大的帮助。

7.交叉验证

交叉验证的基本思想是将原始数据进行分组,一部分作为训练集来训练模型,另一部分作为测试集来评价模型。交叉验证用于评估模型的预测性能,就其实训练好的模型在新数据上的表现,可以在一定程度上减少过拟合。还能从有限的数据中获取尽可能多的有效信息。

机器学习任务中,拿到数据后,我们首先会将原始数据集分为三部分:训练集、验证集和测试集。 训练集用于训练模型,验证集用于模型的参数选择配置,测试集对于模型来说是未知数据,用于评估模型的泛化能力。不同的划分会得到不同的最终模型。

以前我们是直接将数据分割成70%的训练数据和测试数据,现在我们利用K折交叉验证分割数据,首先将数据分为5组,然后再从5组数据之中选择不同数据进行训练。



 

 

猜你喜欢

转载自blog.csdn.net/qq_924485343/article/details/111575784
今日推荐