目录
1.随机森林
1.1随机森林的介绍
1.2算法原理
1.3API
2.线性回归
2.1回归的含义
2.2线性回归
2.3损失函数
2.4多参数回归
2.5最小二乘法MSE
2.6API
1.随机森林
集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。
集成算法大致可以分为:Bagging,Boosting 和 Stacking
(1)每次有放回地从训练集中取出 n 个训练样本,组成新的训练集;
(2)利用新的训练集,训练得到M个子模型;
(3)对于分类问题,M个子模型进行投票,得票最多类别作为最终的类别;
1.1随机森林的介绍
属于集成学习,是通过构建一个包含多个决策树(通常称为基学习器或弱学习器)的森林,每棵树都在不同的数据子集和特征子集上进行训练,最终通过投票或平均预测结果来产生更准确和稳健的预测。这种方法不仅提高了预测精度,也降低了过拟合风险,并且能够处理高维度和大规模数据集
1.2算法原理
-
随机: 特征随机,训练集随机
-
样本:对于一个总体训练集T,T中共有N个样本,每次有放回地随机选择n个样本。用这n个样本来训练一个决策树。
-
特征:假设训练集的特征个数为d,每次仅选择k(k<d)个来构建决策树。
-
-
森林: 多个决策树分类器构成的分类器, 因为随机,所以可以生成多个决策树
-
处理具有高维特征的输入样本,而且不需要降维
-
使用平均或者投票来提高预测精度和控制过拟合
1.3API
class sklearn.ensemble.RandomForestClassifier
参数:
- n_estimators :
int, default=100
森林中树木的数量。(决策树个数)
- criterion:
{“gini”, “entropy”}, default=”gini” 决策树属性划分算法选择
当criterion取值为“gini”时采用 基尼不纯度(Gini impurity)算法构造决策树,
当criterion取值为 “entropy” 时采用信息增益( information gain)算法构造决策树.
- max_depth
int, default=None 树的最大深度。
import pandas as pd
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction import DictVectorizer
from sklearn.decomposition import PCA
import joblib# 加载数据
data = pd.read_csv('./src/titanic/titanic.csv')# 数据预处理
# x =data[['age','sex','pclass']]
y = data['survived']
x =data.drop('survived',axis=1)
# x['age'].fillna(x['age'].mode()[0],inplace=True)
x.fillna({'age': x['age'].mode()[0]}, inplace=True)
x.fillna(0,inplace=True)
x=x.to_dict(orient:='records')vec = DictVectorizer(sparse=False)
x = vec.fit_transform(x)pca = PCA(n_components=5)x_train,x_test,y_train,y_test =train_test_split(x,y,train_size =0.7,random_state=40)transfer =StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
x_test = transfer.transform(x_test)
# print(x_train)# 构建模型
estimator = RandomForestClassifier()# 网格搜索
params_grid={'n_estimators':[120,200,300,500,800,1200],'max_depth':[5,8,15,25,30]}
grid_search = GridSearchCV(estimator,param_grid=params_grid,cv=10)# 训练模型
grid_search = grid_search.fit(x_train,y_train)# 保存模型
joblib.dump(grid_search,'./model/titanic.pkl')# 模型评估
print('最佳结果:',grid_search.best_score_)
print('最佳参数:',grid_search.best_params_)
print('最佳估计器:',grid_search.best_estimator_)
print('交叉验证结果:',grid_search.cv_results_)
2.线性回归
分类的目标变量是标称型数据,回归是对连续型的数据做出预测。
标称型数据(Nominal Data)是统计学和数据分析中的一种数据类型,它用于分类或标记不同的类别或组别,数据点之间并没有数值意义上的距离或顺序。
标称数据的特点:
-
无序性:标称数据的各个类别之间没有固有的顺序关系。
-
非数值性:标称数据不能进行数学运算,因为它们没有数值含义。
-
多样性:标称数据可以有很多不同的类别,具体取决于研究的主题或数据收集的目的。
连续型数据(Continuous Data)表示在某个范围内可以取任意数值的测量,这些数据点之间有明确的数值关系和距离。例如,温度、高度、重量等
连续型数据的特点包括:
-
可测量性:连续型数据通常来源于物理测量。
-
无限可分性:连续型数据的取值可无限精确。
-
数值运算:连续型数据可以进行数学运算。
连续型数据的处理和分析方式有:
-
描述性统计:均值、中位数、众数、标准差、四分位数等,以了解数据的中心趋势和分布情况。
-
概率分布:通过拟合概率分布模型,如正态分布、指数分布、伽玛分布等,来理解数据的随机特性。
-
图形表示:使用直方图、密度图、箱线图、散点图等来可视化数据的分布和潜在的模式。
-
回归分析:建立连续型变量之间的数学关系,预测一个或多个自变量如何影响因变量。
2.1回归的含义
求回归方程(regression equation)的回归系数的过程就是回归。
2.2线性回归
回归,一般指线性回归(linear regression)。
线性回归是机器学习中一种有监督学习的算法。
回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系
(1)需要预测的值:即(目标变量,target,y)
(2)影响目标变量的因素:(x,data),可以是连续值也可以是离散值
(3)因变量和自变量之间的关系:即(模型,model)
2.3损失函数
均方差:
每个实际点到线的竖直方向的距离平方 求和。在平均最小时这条直线就是最优的拟合情况。
2.4多参数回归
在实际情况下,影响事物结果的因素往往不唯一。
求权重β
权重:即重要程度,某一项的权重越大说明它影响结果程度越大。
2.5最小二乘法MSE
方法一:
引入概念:
欧几里得范数的平方,也就是每个元素的平方相加
二次方程导数为0时最小
矩阵相关公式:
进行求导(注意X,y已知看作常数,W未知,对W求导)
方法二:链式求导
2.6API
sklearn.linear_model.LinearRegression()
参数:
fit_intercept:
默认为True,是否计算此模型的截距(偏置)。
如果设置为False,则在计算中将不使用截距(即,数据应中心化)。
属性:
coef_ :回归后的权重系数
intercept_: 偏置
功能:
普通最小二乘法线性回归, 权重和偏置是直接算出来的,对于数量大的不适用,因为计算量太大,计算量太大的适合使用递度下降法
import numpy as np
from sklearn.linear_model import LinearRegression# 数据准备
data=np.array([[0,14,8,0,5,-2,9,-3,399],[-4,10,6,4,-14,-2,-14,8,-144],[-1,-6,5,-12,3,-3,2,-2,30],[5,-2,3,10,5,11,4,-8,126],[-15,-15,-8,-15,7,-4,-12,2,-395],[11,-10,-2,4,3,-9,-6,7,-87],[-14,0,4,-3,5,10,13,7,422],[-3,-7,-2,-8,0,-6,-5,-9,-309]])x = data[:,:8]
y = data[:,8:]
transfer = LinearRegression(fit_intercept=False)
estimator = transfer.fit(x,y)print('权重系数:',estimator.coef_)
print('偏置:',estimator.intercept_)# 预测
y_predict = estimator.predict([[21,14,18,10,5,14,6,7]])
print('预测结果:',y_predict)