scikit-learn估计器学习系列 ---- 1.LinearRegression线性回归

scikit-learn系列

希望跟着scikit-learn的文档系统地学习各个估计器,针对每个估计器也会加入自己对这些估计器的看法和知识,算是巩固学习。
估计器的顺序目前的想法大概是下面列的顺序,会介绍api中每个估计器的参数,有的可能会给点调参的经验,另外还会列出估计器的方法,包含的属性等内容,尽可能全面。
1. 线性回归
2. 逻辑回归
3. 朴素贝叶斯分类器
4. KNN
5. 决策树回归
6. 决策树分类
7. SVC
8. SVR
9. Adaboost
10. GradientBoost(GBDT)
11. RandomForest
12. ExtraTree
13. Bagging


LinearRegression

线性回归介绍

  这里假设都知道线性回归,大概讲一下线性回归目标函数的推导过程,只是帮大家回想一下,具体的推导过程如果有兴趣的可以去查找相关资料,这里就不详细推导。
  首先来说,不敢说所有,但是大部分估计器的目标函数都是通过极大似然,极大后验等来进行估计的,如线性回归,逻辑回归,朴素贝叶斯,决策树等,扯远了。
  假设我们以线性的方式拟合数据,那么拟合数据与真实数据之间存在残差值,现在我们假设每个样本的残差值是独立同分布的,根据中心极限定理,当样本数很多时,可以任务这些样本的残差分布近似为正态分布,那么针对残差可以写出似然函数,取对数极大似然便可以推导出极大似然函数的值,可以利用梯度上升来进行求解,那么目标函数是什么呢?就是极大似然函数值的期望的负值,从而可以得到目标函数,这边不想推导,所以可能不好理解,感兴趣的同学可以翻翻cs229的讲义等内容。


sklearn.linear_model.LinearRegression
参数

LinearRegression来自于sklearn.linear_model模块,用于回归,参数主要有一下。

  • fit_intercept : boolean, optional, default True
    是否加入截距,截距也就是经常出现在式子中的b,默认是加入的,也可以设置为False,这时假设数据已经中心化
  • normalize : boolean, optional, default False
    设置为True的话则对数据进行fit前会进行规范化处理,参数描述是这么说的
    If True, the regressors X will be normalized before regression by subtracting the mean and dividing by the l2-norm.这里说会先减去该样本的均值然后除以该样本的二范数,但是记得规范化是直接除以范数的,这里有点迷惑,希望有知道的可以帮忙解答一下。
    如果fit_intercept是False的话,那么normalize参数会被忽略。
  • copy_X : boolean, optional, default True
    默认复制X结果而不是直接修改X,X是训练样本数据
  • n_jobs : int, optional, default 1
    也就是用来进行计算的任务数,默认只有一个,如果设置为-1那么便等于cpu的核心数
属性(模型可见的参数)
  • coef_ : array, shape (n_features, ) or (n_targets, n_features)
    表示该线性回归的参数,如果有n个特征那么返回的参数也是n
  • intercept_ : array
    截距
方法
  • fit(X, y[, sample_weight]) Fit linear model.
    拟合训练数据,可选参数为sample_weight,也就是每个样本的权重值,可能是你认为更为重要的特征,X为特征数据,y为label值
  • get_params([deep]) Get parameters for this estimator.
    deep默认为True
    返回一个字典,键为参数名,值为参数值,如下
    {‘copy_X’: True, ‘fit_intercept’: True, ‘n_jobs’: 1, ‘normalize’: True}
  • predict(X) Predict using the linear model
    这个很好理解了,输入样本数据输出预测值
  • score(X, y[, sample_weight]) Returns the coefficient of determination R^2 of the
    prediction.
    The coefficient R^2 is defined as (1 - u/v), where u is the residual sum of squares ((y_true - y_pred) * 2).sum() and v is the total sum of squares ((y_true - y_true.mean()) * 2).sum().
    简单地翻译一下,返回的是R^2系数,这个系数的计算方式是这样的,1-(所有样本的残差的平方和/所有样本的类值减去类平均值的平方和),这个值可以是负数,最好的情况是1,说明所有数据都预测正确
  • set_params(**params) Set the parameters of this estimator.
    设置估计器的参数,可以修改参数重新训练

介绍到这,拿个sklearn上的例子作为结尾
from sklearn import datasets
from sklearn.model_selection import cross_val_predict 
from sklearn import linear_model
import matplotlib.pyplot as plt

lr = linear_model.LinearRegression()
#导入波士顿房价预测的数据集,比较经典的数据集
boston = datasets.load_boston()
y = boston.target

# cross_val_predict returns an array of the same size as `y` where each entry
# is a prediction obtained by cross validation:
# 这里使用十折交叉验证进行拟合数据,每次用其中九折数据训练,一折数据预测
predicted = cross_val_predict(lr, boston.data, y, cv=10)

#下面就是调用Pyplot进行绘图做可视化了
fig, ax = plt.subplots()
ax.scatter(y, predicted, edgecolors=(0, 0, 0))
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013019431/article/details/79962305
个人分类: AI scikit-learn
上一篇SVM详细讲解
下一篇scikit-learn估计器学习系列 ---- 2.LogisticRegression逻辑回归
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭