文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python-sklearn数据分析-线性回归和支持向量机(SVM)回归预测(实战)

2023-09-07 15:34

关注

注:本文是小编学习实战心得分享,欢迎交流讨论!话不多说,直接附上代码和图示说明。

目录

一、分段示例

1.导入必要的库

2.读取数据,查看数据基本信息

3.简单查看有无重复值

4.对列名进行分类,便于后面的操作,其中最后一列为预测标签数据

5.对数据进行初步可视化

6.清除异常值

7.将清洗完毕的数据,放进一个文件中

8.特征选择

9.数据归一化

10.进行训练集与测试集划分

11.线性回归模型训练

12.使用支持向量机(SVM)进行回归预测

二、完整代码


一、分段示例

1.导入必要的库

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport sklearn

2.读取数据,查看数据基本信息

可以看到,该数据文件大小为731*7,具体信息如图所示,并发现没有缺失值

df=pd.read_csv('C:/Users/27812/Desktop/2-day.csv')print(df.head(5))print(df.info())#查看后发现没有缺失值print(df.nunique())#除了前两列,其余每列都有重复值print(df.describe())#查看数据的描述性信息

3.简单查看有无重复值

print(df[all_colums].nunique())#提取重复值print(df[df.duplicated()])#结果发现无重复值

4.对列名进行分类,便于后面的操作,其中最后一列为预测标签数据

x_colums=['temp','atemp','hum','windspeed','casual','registered']y_colums=['cnt']all_colums=['temp','atemp','hum','windspeed','casual','registered','cnt']

5.对数据进行初步可视化

分别绘制直方图、散点图以及特征之间的相关表示图,对数据的分布以及特征之间的关系有了初步的了解或判断;同时检测异常值,并通过箱线图可视化。(展示部分图片)

#数据初步可视化#绘制直方图def hist(df):    df.hist(figsize=(30,20))    plt.show()    plt.savefig('a.png')hist(df[all_colums])#绘制散点图def scatter(df):    for i in all_colums[:6]:         plt.scatter(df[i],df['cnt'])         plt.xlabel(i)         plt.ylabel('cnt')         plt.show()scatter(df)#相关系数查看特征与特征,特征与响应的线性关系def corr_view():    data_corr=df.corr()    data_corr=data_corr.abs()    sns.heatmap(data_corr,annot=True)    plt.savefig('b.png')corr_view()#异常值可视化plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号for i in all_colums:    f,ax=plt.subplots(figsize=(10,8))    sns.boxplot(y=i,data=df,ax=ax)    plt.show()    plt.savefig('c.png', dpi=500)#经发现,'hum','windspeed','casual'这三列中有异常值

 

 

      

 6.清除异常值

#异常值处理# 通过Z-Score方法判断异常值,阙值设置为正负2# 复制一个用来存储Z-score得分的数据框,常用于原始对象和复制对象同时进行操作的场景df_zscore = df.copy()    for col in all_colums:     df_col = df[col]      z_score = (df_col - df_col.mean()) / df_col.std()  # 计算每列的Z-score得分    df_zscore[col] = z_score.abs() > 2  # 判断Z-score得分绝对值是否大于2,大于2即为异常值print(df_zscore)#显示为True的表示为异常值# 剔除异常值所在的行print(df[df_zscore['hum'] == False])print(df[df_zscore['windspeed'] == False])print(df[df_zscore['casual'] == False])#最终得到679x7的数列

 7.将清洗完毕的数据,放进一个文件中

注意:新产生的这个文件,不能在打开的同时运行代码,否则因为占用文件而报错

#将清洗后的数据写入新的文件,命名为new_dfnew_df=df[df_zscore['casual'] == False]new_df.to_csv('new_df.csv')

 8.特征选择

#特征选择#这里选择基于Filter(过滤法)中的卡方检验from sklearn.feature_selection import chi2, SelectKBestfeutures=['temp','atemp','hum','windspeed','casual','registered']X, y = new_df[feutures],new_df['cnt']chi2_model = SelectKBest(chi2, k=3)# 以下方法返回选择后的特征矩阵chi2_model.fit_transform(X, y)for i in range(X.shape[1]):    print((chi2_model.scores_[i], chi2_model.pvalues_[i]))#可以发现,'casual','registered'这两个特征与目标'cnt'关系密切final_df=new_df.loc[:,['casual','registered','cnt']]final_df.to_csv('final_df.csv')#再将最终有效数据放入新文件final_df中

 

9.数据归一化

基于距离计算的算法模型,需要将数据归一化,便于模型的运算

#归一化;归一化通常有两种:最值归一化和均值方差归一化,这里采用均值方差归一化from sklearn import preprocessingfrom sklearn.preprocessing import StandardScalerscaler=preprocessing.StandardScaler().fit(final_df)final_df_scaler=scaler.transform(final_df)print(final_df_scaler)print(final_df_scaler.shape)#(679, 3)

10.进行训练集与测试集划分

#对新文件训练集与测试集划分from sklearn.model_selection import train_test_split#random_state:设置随机种子,保证每次运行生成相同的随机数train_set,test_set = train_test_split(final_df_scaler, test_size=0.2, random_state=42)x_train=train_set[:,0:2]y_train=train_set[:,2]x_test=test_set[:,0:2]y_test=test_set[:,2]print(x_train.shape)print(y_test.shape)print(y_train.dtype)

11.线性回归模型训练

#进行模型训练#1.线性回归from sklearn import linear_model#from sklearn import model_selectionfrom sklearn.linear_model import LinearRegressiondef test_LinearRegression():    linearRegression = linear_model.LinearRegression()    #进行训练    linearRegression.fit(x_train, y_train)    #通过LinearRegression的coef_属性获得权重向量,intercept_获得b的值    print("权重向量:%s, b的值为:%.2f" % (linearRegression.coef_, linearRegression.intercept_))    #计算出损失函数的值    print("损失函数的值: %.2f" % np.mean((linearRegression.predict(x_test) - y_test) ** 2))    #计算预测性能得分    print("预测性能得分: %.2f" % linearRegression.score(x_test, y_test))test_LinearRegression()#权重向量:[0.26697613 0.85123791], b的值为:-0.00#损失函数的值: 0.00#预测性能得分: 1.00

12.使用支持向量机(SVM)进行回归预测

注意:需将原数据类型float转化成整数类型int,否则会报错

#2.使用非线性支持向量机(SVM)进行回归预测from sklearn.svm import SVCfrom sklearn import metricssvm_model=SVC()#SVM分类器svm_model.fit(x_train.astype("int"),y_train.astype("int"))#注:需要将数据类型转化为int型prediction=svm_model.predict(x_test.astype("int"))print('准确率为:',metrics.accuracy_score(prediction, y_test.astype("int")))#准确率为: 0.9191176470588235

二、完整代码

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport sklearndf=pd.read_csv('C:/Users/27812/Desktop/2-day.csv')print(df.head(5))print(df.info())#查看后发现没有缺失值ssprint(df.nunique())#除了前两列,其余每列都有重复值print(df.describe())#查看数据的描述性信息x_colums=['temp','atemp','hum','windspeed','casual','registered']y_colums=['cnt']all_colums=['temp','atemp','hum','windspeed','casual','registered','cnt']print(df[all_colums].nunique())#提取重复值print(df[df.duplicated()])#无重复值'''#这步,若前面发现数值有缺失值,可用这个代码进一步查看缺失值情况print(df[category_colums].isnull().sum())print(df[numeric_colums].isnull().sum())#对缺失值进行标注为-1df[numeric_colums]=df[numeric_colums].fillna(-1)df[category_colums]=df[category_colums].fillna(-1)'''#数据初步可视化#绘制直方图def hist(df):    df.hist(figsize=(30,20))    plt.show()    plt.savefig('a.png')hist(df[all_colums])#绘制散点图def scatter(df):    for i in all_colums[:6]:         plt.scatter(df[i],df['cnt'])         plt.xlabel(i)         plt.ylabel('cnt')         plt.show()scatter(df)#相关系数查看特征与特征,特征与响应的线性关系def corr_view():    data_corr=df.corr()    data_corr=data_corr.abs()    sns.heatmap(data_corr,annot=True)    plt.savefig('b.png')corr_view()#异常值可视化plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号for i in all_colums:    f,ax=plt.subplots(figsize=(10,8))    sns.boxplot(y=i,data=df,ax=ax)    plt.show()    plt.savefig('c.png', dpi=500)#经发现,'hum','windspeed','casual'这三列中有异常值#异常值处理# 通过Z-Score方法判断异常值,阙值设置为正负2# 复制一个用来存储Z-score得分的数据框,常用于原始对象和复制对象同时进行操作的场景df_zscore = df.copy()    for col in all_colums:     df_col = df[col]      z_score = (df_col - df_col.mean()) / df_col.std()  # 计算每列的Z-score得分    df_zscore[col] = z_score.abs() > 2  # 判断Z-score得分绝对值是否大于2,大于2即为异常值print(df_zscore)#显示为True的表示为异常值# 剔除异常值所在的行print(df[df_zscore['hum'] == False])print(df[df_zscore['windspeed'] == False])print(df[df_zscore['casual'] == False])#最终得到679x7的数列#将清洗后的数据写入新的文件,命名为new_dfnew_df=df[df_zscore['casual'] == False]new_df.to_csv('new_df.csv')#特征选择#这里选择基于Filter(过滤法)中的卡方检验from sklearn.feature_selection import chi2, SelectKBestfeutures=['temp','atemp','hum','windspeed','casual','registered']X, y = new_df[feutures],new_df['cnt']chi2_model = SelectKBest(chi2, k=3)# 以下方法返回选择后的特征矩阵chi2_model.fit_transform(X, y)for i in range(X.shape[1]):    print((chi2_model.scores_[i], chi2_model.pvalues_[i]))#可以发现,'casual','registered'这两个特征与目标'cnt'关系密切final_df=new_df.loc[:,['casual','registered','cnt']]final_df.to_csv('final_df.csv')#再将最终有效数据放入新文件final_df中#归一化;归一化通常有两种:最值归一化和均值方差归一化,这里采用均值方差归一化from sklearn import preprocessingfrom sklearn.preprocessing import StandardScalerscaler=preprocessing.StandardScaler().fit(final_df)final_df_scaler=scaler.transform(final_df)print(final_df_scaler)print(final_df_scaler.shape)#(679, 3)#对新文件训练集与测试集划分from sklearn.model_selection import train_test_split#random_state:设置随机种子,保证每次运行生成相同的随机数train_set,test_set = train_test_split(final_df_scaler, test_size=0.2, random_state=42)x_train=train_set[:,0:2]y_train=train_set[:,2]x_test=test_set[:,0:2]y_test=test_set[:,2]print(x_train.shape)print(y_test.shape)print(y_train.dtype)#进行模型训练#1.线性回归from sklearn import linear_model#from sklearn import model_selectionfrom sklearn.linear_model import LinearRegressiondef test_LinearRegression():    linearRegression = linear_model.LinearRegression()    #进行训练    linearRegression.fit(x_train, y_train)    #通过LinearRegression的coef_属性获得权重向量,intercept_获得b的值    print("权重向量:%s, b的值为:%.2f" % (linearRegression.coef_, linearRegression.intercept_))    #计算出损失函数的值    print("损失函数的值: %.2f" % np.mean((linearRegression.predict(x_test) - y_test) ** 2))    #计算预测性能得分    print("预测性能得分: %.2f" % linearRegression.score(x_test, y_test))test_LinearRegression()#权重向量:[0.26697613 0.85123791], b的值为:-0.00#损失函数的值: 0.00#预测性能得分: 1.00#2.使用非线性支持向量机(SVM)进行回归预测from sklearn.svm import SVCfrom sklearn import metricssvm_model=SVC()#SVM分类器svm_model.fit(x_train.astype("int"),y_train.astype("int"))#注:需要将数据类型转化为int型prediction=svm_model.predict(x_test.astype("int"))print('准确率为:',metrics.accuracy_score(prediction, y_test.astype("int")))#准确率为: 0.9191176470588235

来源地址:https://blog.csdn.net/weixin_57501965/article/details/126593700

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯