iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python-sklearn数据分析-线性回归和支持向量机(SVM)回归预测(实战)
  • 575
分享到

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

sklearnpython回归 2023-09-07 15:09:02 575人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

注:本文是小编学习实战心得分享,欢迎交流讨论!话不多说,直接附上代码和图示说明。 目录 一、分段示例 1.导入必要的库 2.读取数据,查看数据基本信息 3.简单查看有无重复值 4.对列名进行分类,便于后面的操作,其中最后一列为预测标签数据

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

目录

一、分段示例

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

--结束END--

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

本文链接: https://www.lsjlt.com/news/398444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作