机器学习笔记(五)回归模型

1、线性回归模型

1、广义线性模型
也就是x和y的线性组合也就是:
y = w1x1+w2x2…+wnxn+b
coef_是系数矩阵w =[w1,w2…wn],intercept_就是截距
2、普通最小二乘法
拟合一个带有系数 w = (w_1, …, w_p) 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。
在这里插入图片描述
普通最小二乘依赖于数据的相关独立性,也就是矩阵的各列都是相关的,设计矩阵会趋向于奇异矩阵,这种特性导致最小二乘估计对于随机误差非常敏感,可能产生很大的方差。我们真实操作中,可能收集的数据高度相关,会严重影响结果。
2.1、使用函数说明
使用函数说明复制的知乎苹果小姐ye

最小二乘法线性回归:sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
参数:
1、fit_intercept:boolean,optional,default True。是否计算截距,默认为计算。如果使用中心化的数据,可以考虑设置为False,
不考虑截距。注意这里是考虑,一般还是要考虑截距。
2、normalize:boolean,optional,default False。标准化开关,默认关闭;该参数在fit_intercept设置为False时自动忽略。如果为
True,回归会标准化输入参数:(X-X均值)/||X||,当然啦,在这里还是建议将标准化的工作放在训练模型之前;若为False,在训练
模型前,可使用sklearn.preprocessing.StandardScaler进行标准化处理。
3、copy_X:boolean,optional,default True。默认为True, 否则X会被改写。
4、n_jobs:int,optional,default 1int。默认为1.当-1时默认使用全部CPUs ??(这个参数有待尝试)。
属性:
coef_:array,shape(n_features, ) or (n_targets, n_features)。回归系数(斜率)。
intercept_: 截距
方法:
1、fit(X,y,sample_weight=None)
X:array, 稀疏矩阵 [n_samples,n_features]
y:array [n_samples, n_targets]
sample_weight:array [n_samples],每条测试数据的权重,同样以矩阵方式传入(在版本0.17后添加了sample_weight)。
2、predict(x):预测方法,将返回值y_pred
3、get_params(deep=True): 返回对regressor 的设置值
4、score(X,y,sample_weight=None):评分函数,将返回一个小于1的得分,可能会小于0

1.2、代码

from sklearn import linear_model
import numpy as np
reg = linear_model.LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
x = np.array([[1,2], [2,3], [2, 4]])
y = np.array([1,2,3])
reg.fit(x,y)
print(reg.predict([[4,6]]))

2、随机森林

1、随机森林
随机森林简单来说就是bagging+决策树,就是多颗决策树组成的森林
2、决策树的建立
常见的决策树算法:

  • ID3,使用的信息增益建立的决策树。
  • C4.5,使用的信息增益率建立的决策树。
  • CART,基尼系数。

信息增益越大,表示特征对样本熵(表示混乱程度)的减少能力越强。
3、bagging的使用
从原始数据中使用有放回的方法抽取数据(Bootstraping),随机抽取n个样本,进行k轮,获得k个样本集,建立k个模型(随机森林的时候就是决策树),对于分类问题,我们用投票法决定结果,对于回归问题,按照加权平均法得到最后的结果。
ps:随机森林每次选的特征个数也不一样,每棵树上不一定要有全部的特征。
4、我们调用api需要调整的参数为

  • 决策树的数量
  • 特征属性的个数
  • 决策树的深度

5、代码展示(python)
(1)用scikit-learn实现:

#1、读取数据
import pandas as pd
import numpy as np

data = pd.read_csv(r'C:\Users\13056\Documents\Tencent Files\1305638814\FileRecv\123.csv', sep = ',',encoding="gbk")

X = np.array(data)[:748:,-3:-1]
y = np.array(data)[:748:,-1:]
x_train = X[:-200]
x_test = X[-200:]
y_train = y[:-200]
y_test = y[-200:]
title = ['1','2',"3"]
#一共750个样本,每个样本有3个特征

#2、随机森林
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn import metrics
import matplotlib.pyplot as plt

bt = RandomForestClassifier(n_estimators=2, max_depth=None)
'''
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, 
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, 
n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
n_estimator是我们确定的决策树的数目
criterion建立决策树的方法,默认gini
max_depth:树的最大深度
min_samples_split分割内部节点所需要的最小样本数量
min_samples_leaf:需要在叶子节点上的最小样本数量
min_weight_fraction_leaf:一个叶子上的最大权重总和
random_state :使用随机生成树生成种子
'''
y_train *= 1000
bt.fit(x_train,y_train.astype('int'))
preds = bt.predict(x_test)/1000
plt.scatter(y_test,preds,alpha=0.5,s=6)
metrics.r2_score(y_test,preds)

点击

猜你喜欢

转载自blog.csdn.net/weixin_45743162/article/details/114250563
今日推荐