机器学习包Scikit-learn(一)

数据预处理

缺失值处理

import pandas as pd
import numpy as np
data=pd.read_excel('missing.xlsx')#数据框data
c=np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])#数组c
C=pd.DataFrame(c)#数据框C

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用Scikit-learn中的数据预处理模块进行缺失值填充
下面对C数据框中的数据采用按列均值填充
对c数组中的数据采用按行中位数填充
对data数据中的a,c列采用按列最频繁值填充进行填充

from sklearn.impute import SimpleImputer
fC=C
imp=SimpleImputer(missing_values=np.nan,strategy='mean')
imp.fit(fC)
fC=imp.transform(fC)

fc=c
imp=SimpleImputer(missing_values=np.nan,strategy='median')
imp.fit(fc)
fc=imp.transform(fc)

fD=data[['a','c']]
imp=SimpleImputer(missing_values=np.nan,strategy='most_frequent')
imp.fit(fD)
fD=imp.transform(fD)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据规范化

import numpy as np
data=np.load('data.npy')
data=data[:,1:]

在这里插入图片描述
可以看出指标之间的数据差异比较大,需要做规范化处理
同时该数据存在空值,在进行规范化处理之前需要先对其进行填充处理
这里采用按列均值填充

from sklearn.impute import SimpleImputer
imp=SimpleImputer(missing_values=np.nan,strategy='mean')
imp.fit(data)
data=imp.transform(data)

在这里插入图片描述
为了区分,定义x=data,x1=data
对x做均值-方差规范化处理
对x1做极差规范化处理

首先对x做均值-方差规范化处理

from sklearn.preprocessing import StandardScaler
x=data
scaler=StandardScaler()
scaler.fit(x)
x=scaler.transform(x)

在这里插入图片描述
对x1做极差规范化处理

from sklearn.preprocessing import MinMaxScaler
x1=data
min_max_scaler=MinMaxScaler()
min_max_scaler.fit(x1)
x1=min_max_scaler.transform(x1)

在这里插入图片描述

主成分分析

import pandas as pd
Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
X=Data.iloc[:,1:]
#数据规范化处理
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
scaler.fit(X)
X=scaler.transform(X)

在这里插入图片描述

在这里插入图片描述

#主成分分析
from sklearn.decomposition import PCA#导入主成分分析模块PCA
pca=PCA(n_components=0.95)#创建对象pca,设置累计贡献率为95%以上
pca.fit(X)#对待分析的数据进拟合训练
Y=pca.transform(X)#返回提取的主成分
tzxl=pca.components_#特征向量
tz=pca.explained_variance_#特征值
gxl=pca.explained_variance_ratio_#主成分方差百分比(贡献率)
#验证第一个主成分前面的4个分量的值
Y00=sum(X[0,:]*tzxl[0,:])
Y01=sum(X[1,:]*tzxl[0,:])
Y02=sum(X[2,:]*tzxl[0,:])
Y03=sum(X[3,:]*tzxl[0,:])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于主成分进行综合排名.
定义综合排名指标为F
F计算公式
F=g1Y1+g2F2+…+gmFm
m表示提取的主成分个数,Fi和gi(i<=m)分别表示第i个主成分和其贡献率

F=gxl[0]*Y[:,0]+gxl[1]*Y[:,1]+gxl[2]*Y[:,2]#综合得分=各个主成分*贡献率之和
dq=list(Data['地区'].values)#提取地区
Rs=pd.Series(F,index=dq)#以地区作为index,综合得分为值,构建序列
Rs=Rs.sort_values(ascending=False)#按综合得分降序进行排序

在这里插入图片描述

线性回归

在发电场中电力输出(PE)与AT(温度)、V(压力)、AP(湿度)、RH(压强)有关
求出PE与AT、V、AP、RH之间的线性回归关系式系数向量(包括常数项)和拟合优度(判定系数)
今有某次测试数据AT=28.4、V=50.6、AP=1011.9、RH=80.54,试利用构建的线性回归模型预测其PE值

读取数据,确定自变量x和因变量y

import pandas as pd
data=pd.read_excel('发电场数据.xlsx')
x=data.iloc[:,0:4].values
y=data.iloc[:,4].values

在这里插入图片描述

在这里插入图片描述

线性回归分析

#导入线性回归模块,简称为LR
from sklearn.linear_model import LinearRegression as LR
lr=LR()#利用LR创建线性回归对象lr
lr.fit(x,y)#对数据进行拟合训练
Slr=lr.score(x,y)#判定系数R^2
c_x=lr.coef_#x对应的回归系数
c_b=lr.intercept_#回归系数常数项

在这里插入图片描述
在这里插入图片描述

利用线性回归模型进行预测

(1)可以利用lr对象中的predict()方法进行预测

import numpy as np
x1=np.array([28.4,50.6,1011.9,80.54])
x1=x1.reshape(1,4)
R1=lr.predict(x1)

(2)也可以利用线性回归方程式进行预测

r1=x1*c_x
R2=r1.sum()+c_b

在这里插入图片描述
两种方法预测结果一致

任务描述 在发电场电力输出PEAT温度)、V(压力)、AP湿度)、RH压强)有关,相关测试数据见“发电场数据.xlsx”文件,请完成以下任务:1)利用线性回归分析命令,求出PEAT、V、APRH之间的线性回归关系式系数向量(括常数项)和拟合优度(判定系数),并在命令窗口输出;2)今有某次测试数据AT=28.4、V=50.6、AP=1011.9、RH=80.54,试利用构建的线性回归模型预测其PE值。 相关知识 为了完成本关任务,你需要掌握:1.如何利用线性回归模型求线性回归关系式系数向量和拟合优度,2.如何利用线性回归模型进行预测。 线性回归关系式系数向量和拟合优度 “系数向量”即系数的向量。 “拟合优度”是回归分析中用来检验样本数据点聚集在回归线周围的密集程度,用于评价回归方程对样本观测值的拟合程度。 #判定系数 slr=lr.score(x,y) #系数 c_x=lr.coef_ #常系数 c_b=lr.intercept_ print(slr,c_x,c_b) 输出:0.9286960898122536 [-1.97751311 -0.23391642 0.06208294 -0.1580541 ] 454.6092743153102 线性回归预测模型 线性回归预测是指通过对两个或两个以上的自变量个因变量的相关分析,建立预测模型进行预测。 示例如下: R1=lr.predict(x1) prtint(R1) 输出:[436.70378447] 编程要求 根据提示,在右侧编辑器补充代码,输出线性回归关系式系数向量(括常数项)、拟合优度(判定系数)和预测结果。 测试说明 平台会对你编写的代码进行测试: 测试输入:28.4,50.6,1011.9,80.54 预期输出: 436.70378447 提示: #5.导入线性方程的 from sklearn.linear_model import LinearRegression as LR #6.创建线性回归对象 lr=LR() #7.对数据进行拟合 lr.fit(x,y)#**********Begin**********# #在发电场电力输出PEAT温度)、V(压力)、AP湿度)、RH压强)有关, # 相关测试数据见“发电场数据.xlsx”文件,请完成以下任务: # 1)求出PEAT、V、APRH之间的线性回归关系式系数向量,用列表b表示,其元素依次为常数项、AT回归系数、V回归系数、AP回归系数、RH回归系数。 # 2)求出回归方程的拟合优度(判定系数),用变量r表示 # 3)今有某次测试数据AT=28.4、V=50.6、AP=1011.9、RH=80.54,试利用构建的线性回归模型预测其PE值 def return_values(): import pandas as pd data=pd.read_excel('发电场数据.xlsx') x=data.iloc[:,0:4].values #自变量数据 y=data.iloc[:,4].values #因变量数据 return(b,r,PE) #**********End**********#
04-03
<think>嗯,用户想了解如何使用Python的sklearn库实现线性回归,计算系数向量、拟合优度,并进行预测。首先,我需要回忆下线性回归在sklearn中的基本用法。记得线性回归模型在sklearn.linear_model模块里,类名是LinearRegression。用户提到的PEAT、V、APRH之间的关系,应该是用这四个变量作为特征,PE作为目标变量。 接下来,步骤应该是先导入必要的库,然后准备数据,括训练数据和测试数据。数据预处理部分可能需要注意是否需要标准化,不过线性回归本身对标准化没有严格要求,但有时候特征缩放能加快收敛。不过用户的问题里没有提到数据预处理,可能默认数据已经是处理好的。 然后创建模型对象,用fit方法进行训练。训练之后,可以通过coef_属性获取系数向量,intercept_获取截距项,也就是常数项。拟合优度R²可以用score方法计算,传入特征和目标变量即可。 预测部分则是用训练好的模型调用predict方法,传入测试数据特征,得到PE的预测值。 用户可能的问题还括如何解读这些系数,或者如何评估模型的其他指标,比如MSE、MAE等,但根据问题描述,主要关注的是系数、R²和预测值。 需要检查是否有引用相关的引用内容。根据用户提供的引用,引用[1]、[3]、[4]提到了LinearRegression的导入和使用,还有score方法等。所以回答中应该引用这些内容,特别是创建模型、拟合、评分部分。 可能还需要注意数据输入的格式,比如x应该是二维数组,即使只有个特征也需要reshape。如果用户的数据是DataFrame,可能需要用.values或者直接传递列。另外,测试数据需要和训练数据有相同的特征数量,顺序也要致。 另外,用户可能对代码的具体步骤不太清楚,所以需要分步骤说明,比如导入库、数据准备、模型训练、获取系数、计算R²、进行预测。示例代码要清晰,变量名对应问题中的AT、V、APRH等。 最后,生成相关问题时要考虑用户可能进步的问题,比如数据预处理、模型评估的其他指标、不同回归模型的比较等。</think>### 线性回归模型实现步骤 #### 1. 导入库并创建模型 ```python from sklearn.linear_model import LinearRegression as LR # 引用[1][3] import numpy as np # 创建线性回归对象 lr = LR() ``` #### 2. 准备数据 假设训练数据格式为: - 特征矩阵$X$:AT、V、APRH四列数据 - 目标变量$y$:对应PE值 ```python # 示例数据结构(需替换为实际数据) X_train = np.array([[14.96, 41.76, 1024.07, 73.17], [25.18, 62.96, 1021.75, 59.08]]) y_train = np.array([463.26, 444.37]) X_test = np.array([[14.96, 41.76, 1024.07, 73.17]]) # 测试数据 ``` #### 3. 模型训练 ```python lr.fit(X_train, y_train) # 对数据进行拟合训练(引用[1]) ``` #### 4. 获取模型参数 - **系数向量**: ```python coefficients = lr.coef_ # 对应AT、V、APRH的系数(引用[1]) ``` - **常数项**: ```python intercept = lr.intercept_ # 回归方程常数项(引用[1]) ``` #### 5. 计算拟合优度 ```python R_squared = lr.score(X_train, y_train) # 判定系数R²(引用[1]) ``` #### 6. 进行预测 ```python y_pred = lr.predict(X_test) # 预测PE值 ``` ### 完整示例代码 ```python from sklearn.linear_model import LinearRegression as LR import numpy as np # 训练数据(示例) X_train = np.array([[14.96,41.76,1024.07,73.17], [25.18,62.96,1021.75,59.08]]) y_train = np.array([463.26, 444.37]) # 测试数据(示例) X_test = np.array([[14.96,41.76,1024.07,73.17]]) # 创建并训练模型 lr = LR() lr.fit(X_train, y_train) # 输出结果 print("系数向量:", lr.coef_) # 例如:[-1.97, -0.24, 0.06, -0.16] print("常数项:", lr.intercept_) # 例如:454.34 print("拟合优度R²:", lr.score(X_train, y_train)) # 例如:0.923 print("预测PE值:", lr.predict(X_test)) # 例如:[463.26] ``` ### 关键参数说明 1. **系数向量**:表示各自变量(AT、V、APRH)对PE的影响权重 2. **常数项**:回归方程的截距项 3. **R²值**:取值范围$[0,1]$,越接近1说明模型解释能力越强 4. **预测值**:基于输入特征组合的PE预测结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值