python岭回归分析里的数据读取问题



```python
# 导入第三方模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.linear_model import Ridge
import warnings
warnings.filterwarnings("ignore")   # 忽略警告信息输出

# 读取数据
bingdata = pd.read_excel(r'C:\Users\86150\Desktop\1111.xlsx')
# print(bingdata)
bingdata=np.array(bingdata).reshape(len(bingdata),1)
# print(bingdata)
# 选择自变量、因变量
X,y = bingdata.ix[:,2:-1],bingdata.ix[:,-1]
# 将数据集拆分为训练集、测试集
X_train,X_test,y_train,y_test = model_selection.train_test_split(X,y,test_size=0.2,random_state=123)

# 构造不同的 lambda值
lambds = np.logspace(-5,2,200)
# 构造空列表,用于存储模型的偏回归系数
ridge_coffs = []
# 求解不同lambda对应的系数值
for lambd in lambds:
    ridge = Ridge(alpha=lambd,normalize=True)
    ridge.fit(X_train,y_train)
    ridge_coffs.append(ridge.coef_)

# 绘制lambda 的对数与回归系数的关系
# 设置绘图风格
plt.style.use('seaborn')
# 为了画图中文可以正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体
plt.rcParams['axes.unicode_minus'] = False  #解决保存图像时负号'-'显示为方块的问题

plt.plot(lambds,ridge_coffs)
# 对x轴做对数处理
plt.xscale('log')
# 设置x轴和y轴标签
plt.xlabel('Log($\lambda$)')
plt.ylabel('Cofficients')
plt.title('正则项系数与回归系数之间的关系')
# 显示图形
plt.show()
# 加载模块
import plotly_express as px

# 正则项系数与回归系数之间的关系
p_lam = [lambds] * 8
p_lam = pd.Series(pd.DataFrame(p_lam).values.ravel())
c_s = pd.DataFrame(ridge_coffs,columns=['c'+str(i) for i in range(1,9)])
c_res = pd.Series()
for i in range(8):
    temp = pd.Series(c_s['c'+str(i+1)])
    temp.index=len(lambds)*['c'+str(i+1)]
    c_res = pd.concat([c_res,temp])
c_res = pd.DataFrame(c_res)
c_res = c_res.reset_index()
xy_df= pd.concat([p_lam,c_res],axis=1)
xy_df.columns =['lambda','coef','coef_values']
px.line(xy_df,x="lambda",y='coef_values',log_x=True,color='coef',height=400,width=600)

上面的是源码

遇到的问题是数据读取


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/724926204486174.png "#left")

你的文件是什么格式?有错误截图吗

Python数据读取与线性回归分析
可以借鉴下

data.head(n=1)   
data.iloc[:,1] # 提取第一列数据
data[0:2] # 提取两行数据
print (data.iloc[[0,2],[1,2]])  #自由选取行位置和列位置对应的数据切片
X= data[['x1','x2','x3']]  #选取列名为x1,x2,x3的列作为X
Y= data[['y']]   #选取列名为y的作为Y.
##对上述的X和Y进行划分为37
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=42)


  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7618706
  • 这篇博客也不错, 你可以看下python数据分析和数据可视化总结
  • 除此之外, 这篇博客: Python 数据可视化 生成数据中的 使用的工具 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • matplotlib(数学绘图库)、Pygal包

  • 您还可以看一下 武鹏老师的Python数据分析与机器学习课程中的 数据的收集与整理小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于岭回归分析所需的数据,可以使用pandas库中的read_csv()或者read_excel()函数来读取数据文件,例如可以使用以下代码将csv格式的数据文件读取为pandas DataFrame对象:

    import pandas as pd data = pd.read_csv('file.csv')

    如果数据文件是excel格式,则可以使用以下代码读取数据:

    import pandas as pd data = pd.read_excel('file.xlsx')

    读取数据后,可以使用pandas库和numpy库对数据进行预处理和处理,最终输出Ridge Regression所需的输入数据。以下是一个进行简单线性回归分析拟合和绘图的示例代码:

    import numpy as np import statsmodels.api as sm import pandas as pd import matplotlib.pyplot as plt

    data=pd.read_excel('data.xlsx',encoding='ute-8') y=data['target'] x=data.drop('target',axis=1)

    通过特征缩放等方式对数据进行预处理

    线性回归拟合

    x_n = sm.add_constant(x) #statsmodels进行回归时,一定要添加此常数项 model = sm.OLS(y, x_n) #model是回归分析模型 results = model.fit() #results是回归分析后的结果

    输出回归分析的结果

    print(results.summary()) print('Parameters: ', results.params) print('R2: ', results.rsquared)

    以下用于出图

    plt.figure() plt.rcParams['font.sans-serif'] = ['Kaiti'] # 指定默认字体 plt.title(u"线性回归预测") plt.xlabel(u"x") plt.ylabel(u"y") plt.axis([0, 3000000, 0, 5000000000]) plt.scatter(x, y, marker="o",color="b", s=50) plt.plot(x_n, y, linewidth=3, color="r") plt.show()

    其中,data变量为读取到的数据DataFrame对象,y和x分别为对应数据集的标签和特征,可以根据具体需要进行设置。实际进行岭回归分析时还需要进行一些其他操作,例如对特征进行缩放或者正则化等操作,具体操作可以参考相关文献或者在线教程。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据问题描述,可能出现读取数据文件路径错误的问题。需要先检查一下文件路径是否正确,建议使用绝对路径。如果使用相对路径,需要确认所在的工作目录是否正确。以下是一种可行的代码,可以尝试运行一下:

# 导入第三方模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.linear_model import Ridge
import warnings
warnings.filterwarnings("ignore")   # 忽略警告信息输出

# 读取数据
bingdata = pd.read_excel('C:/Users/86150/Desktop/1111.xlsx')  # 绝对路径
bingdata = np.array(bingdata).reshape(len(bingdata),1)
# 选择自变量、因变量
X, y = bingdata.ix[:, 2:-1], bingdata.ix[:, -1]
# 将数据集拆分为训练集、测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.2, random_state=123)

# 构造不同的 lambda值
lambds = np.logspace(-5, 2, 200)
# 构造空列表,用于存储模型的偏回归系数
ridge_coffs = []
# 求解不同lambda对应的系数值
for lambd in lambds:
    ridge = Ridge(alpha=lambd, normalize=True)
    ridge.fit(X_train, y_train)
    ridge_coffs.append(ridge.coef_)

# 绘制lambda 的对数与回归系数的关系
# 设置绘图风格
plt.style.use('seaborn')
# 为了画图中文可以正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体
plt.rcParams['axes.unicode_minus'] = False  #解决保存图像时负号'-'显示为方块的问题

plt.plot(lambds, ridge_coffs)
# 对x轴做对数处理
plt.xscale('log')
# 设置x轴和y轴标签
plt.xlabel('Log($\lambda$)')
plt.ylabel('Cofficients')
plt.title('正则项系数与回归系数之间的关系')
# 显示图形
plt.show()
# 加载模块
import plotly_express as px

# 正则项系数与回归系数之间的关系
p_lam = [lambds] * 8
p_lam = pd.Series(pd.DataFrame(p_lam).values.ravel())
c_s = pd.DataFrame(ridge_coffs, columns=['c'+str(i) for i in range(1, 9)])
c_res = pd.Series()
for i in range(8):
    temp = pd.Series(c_s['c'+str(i+1)])
    temp.index = len(lambds) * ['c'+str(i+1)]
    c_res = pd.concat([c_res, temp])
c_res = pd.DataFrame(c_res)
c_res = c_res.reset_index()
xy_df= pd.concat([p_lam, c_res], axis=1)
xy_df.columns = ['lambda', 'coef', 'coef_values']
px.line(xy_df, x="lambda", y='coef_values', log_x=True, color='coef', height=400, width=600)

如果我的回答解决了您的问题,请采纳!

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

根据您提供的代码和数据,在读取Excel数据时出现了问题。有以下几点建议:

  1. bingdata = pd.read_excel(r'C:\Users\86150\Desktop\1111.xlsx') 这行代码读取Excel数据,您需要确认路径r'C:\Users\86150\Desktop\1111.xlsx'是否正确,和Excel文件是否存在。
  2. bingdata=np.array(bingdata).reshape(len(bingdata),1) 这行代码将bingdata转换为二维数组,但是reshape的第二个参数应该是列数,而您写成了1。这会导致数据只有一列, very可能不是您期望的结果。
  3. X,y = bingdata.ix[:,2:-1],bingdata.ix[:,-1] 这两行代码选择自变量X和因变量y。但是.ix已经在新版本的Pandas中弃用,建议使用.loc或.iloc代替。
  4. 您使用的Pandas和Sklearn等包的版本比较低,建议更新到最新版本,很多废弃的函数已经被移除,使用旧版本可能会出错。

除此之外,其他需要检查的点有:

  1. Excel文件的格式是否正确,列标题、数据类型是否适合读取为Pandas DataFrame。
  2. 在显示图像时是否真的出现了中文显示问题。如果是,则需要在plt.rcParams中设置更多参数来解决。
  3. lambda的取值范围是否过大过小,导致系数值出现异常。可以适当调整lambda的范围。
  4. 绘图代码中对数标尺等设置是否正确。

所以,我的建议是:

  1. 重新检查Excel文件路径是否正确,并确认文件内容格式无误。
  2. 更新Pandas、Sklearn等包到最新版本。
  3. 修正reshape的第二个参数,将bingdata转换为正确的二维数组。
  4. 使用.loc或.iloc代替.ix选择数据。
  5. 适当调整lambda的取值范围,设置绘图参数等。
  6. 在显示图像时,设置更多plt.rcParams参数解决中文显示问题。