import matplotlib.pyplot as plt # test_score 测试集的精度 y1_i = [32.01377033999997, 52.995126360000086,185.63600004000017] y1_c = [34.805954499999984,59.619636000000014,188.34518989999992] y1_a = [34.05963100000008, 53.854412799999864,187.09286480000037] # macro-F1 测试集的宏F1 y2_i = [] y2_c = [] y2_a = [] # micro-F1 测试集的微F1 y3_i = [] y3_c = [] y3_a = [] # # 隐藏层神经元的个数 # x1 = [] # 隐藏层的个数 x2 = [100,200,400] # # 窗口大小 # x3 = [] ax1 = plt.gca() ax1.set(xlabel='neuron_num', ylabel='train_seconds') # ax1.set(xlabel='batch_size', ylabel='accuracy') # ax1.set(xlabel='batch_size', ylabel='macro-F1') # ax1.set(xlabel='batch_size', ylabel='micro-F1') # 三种不同学习率 l1, = ax1.plot(x2,y1_i,'red', label='invscaling') l2, = ax1.plot(x2,y1_c,'green', label='constant') l3, = ax1.plot(x2,y1_a,'blue', label='adaptive') plt.legend() plt.show()
时间: 2023-07-15 18:14:38 浏览: 98
这段代码是用于绘制三种不同学习率下,不同神经元个数对应的训练时间的折线图。其中,测试集的精度、宏F1和微F1分别用y1_i、y2_i和y3_i表示。对于每一种学习率,都有对应的三条折线,分别用l1、l2和l3表示。x2代表隐藏层的神经元个数,根据代码注释中所说,x1和x3可能是其他的两个超参数。最后,通过plt.show()将图像展示出来。
相关问题
import scipy.io as sio from sklearn import svm import numpy as np import matplotlib.pyplot as plt data=sio.loadmat('AllData') labels=sio.loadmat('label') print(data) class1 = 0 class2 = 1 idx1 = np.where(labels['label']==class1)[0] idx2 = np.where(labels['label']==class2)[0] X1 = data['B007FFT0'] X2 = data['B014FFT0'] Y1 = labels['label'][idx1].reshape(-1, 1) Y2 = labels['label'][idx2].reshape(-1, 1) ## 随机选取训练数据和测试数据 np.random.shuffle(X1) np.random.shuffle(X2) # Xtrain = np.vstack((X1[:200,:], X2[:200,:])) # Xtest = np.vstack((X1[200:300,:], X2[200:300,:])) # Ytrain = np.vstack((Y1[:200,:], Y2[:200,:])) # Ytest = np.vstack((Y1[200:300,:], Y2[200:300,:])) # class1=data['B007FFT0'][0:1000, :] # class2=data['B014FFT0'][0:1000, :] train_data=np.vstack((X1[0:200, :],X2[0:200, :])) test_data=np.vstack((X1[200:300, :],X2[200:300, :])) train_labels=np.vstack((Y1[:200,:], Y2[:200,:])) test_labels=np.vstack((Y1[200:300,:], Y2[200:300,:])) ## 训练SVM模型 clf=svm.SVC(kernel='linear', C=1000) clf.fit(train_data,train_labels.reshape(-1)) ## 用测试数据测试模型准确率 train_accuracy = clf.score(train_data, train_labels) test_accuracy = clf.score(test_data, test_labels) # test_pred=clf.predict(test_data) # accuracy=np.mean(test_pred==test_labels) # print("分类准确率为:{:.2F}%".fromat(accuracy*100)) x_min,x_max=test_data[:,0].min()-1,test_data[:,0].max()+1 y_min,y_max=test_data[:,1].min()-1,test_data[:,1].max()+1 xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02)) # 生成一个由xx和yy组成的网格 # X, Y = np.meshgrid(xx, yy) # 将网格展平成一个二维数组xy xy = np.vstack([xx.ravel(), yy.ravel()]).T # Z = clf.decision_function(xy).reshape(xx.shape) # z=clf.predict(np.c_[xx.ravel(),yy.ravel()]) z=xy.reshape(xx.shape) plt.pcolormesh(xx.shape) plt.xlim(xx.min(),xx.max()) plt.ylim(yy.min(),yy.max()) plt.xtickes(()) plt.ytickes(()) # # 画出分界线 # axis.contour(X, Y, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--']) # axis.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,linewidth=1, facecolors='none') plt.scatter(test_data[:,0],test_data[:1],c=test_labels,cmap=plt.cm.Paired) plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=80,facecolors='none',linewidths=1.5,edgecolors='k') plt.show()处理一下代码出错问题
代码中出现了几个错误:
1. 在最后几行代码中,plt.pcolormesh(xx.shape)应该改为plt.pcolormesh(xx, yy, z),因为需要绘制的是网格xy上对应的值z。
2. 在plt.xtickes(())和plt.ytickes(())中,xtickes和ytickes应该改为xticks和yticks,因为正确的函数名是xticks和yticks。
3. 在plt.scatter(test_data[:,0],test_data[:1],c=test_labels,cmap=plt.cm.Paired)中,test_data[:,0]和test_data[:1]应该改为test_data[:,0]和test_data[:,1],因为需要绘制的是测试数据的两个特征值。
4. 在画出分界线的代码中,应该将注释的代码取消注释,即将axis.contour(X, Y, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])的注释去掉。
为什么提示line 35, in <module> lasso = Lasso(alpha=lasso.alphas_[i]) AttributeError: 'Lasso' object has no attribute 'alphas_'
非常抱歉,我在代码中犯了一个错误。我应该使用`LassoCV`对象的`alphas_`属性来获取1000个Lasso系数,而不是使用`Lasso`对象。以下是修改后的代码:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LassoCV
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 加载Excel数据
data = pd.read_excel('D:\Data\20230726.xlsx')
X = data.iloc[:, :-1].values # 特征变量
y = data.iloc[:, -1].values # 目标变量
# 数据标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 自动交叉验证选择最佳Lasso系数
lasso_cv = LassoCV(cv=5, alphas=np.logspace(-3, 3, 1000))
lasso_cv.fit(X_scaled, y)
# 最佳Lasso系数
best_alpha = lasso_cv.alpha_
# 获取各变量的贡献度
coefficients = lasso_cv.coef_
# 储存1000个lasso系数和8个贡献度列表
X = np.log10(lasso_cv.alphas_)
Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8 = [], [], [], [], [], [], [], []
for i in range(1000):
lasso = Lasso(alpha=lasso_cv.alphas_[i])
lasso.fit(X_scaled, y)
coef = lasso.coef_
Y1.append(coef[0])
Y2.append(coef[1])
Y3.append(coef[2])
Y4.append(coef[3])
Y5.append(coef[4])
Y6.append(coef[5])
Y7.append(coef[6])
Y8.append(coef[7])
# 绘制Lasso回归系数变化路径图
plt.figure()
plt.plot(X, Y1, label='Feature 1')
plt.plot(X, Y2, label='Feature 2')
plt.plot(X, Y3, label='Feature 3')
plt.plot(X, Y4, label='Feature 4')
plt.plot(X, Y5, label='Feature 5')
plt.plot(X, Y6, label='Feature 6')
plt.plot(X, Y7, label='Feature 7')
plt.plot(X, Y8, label='Feature 8')
plt.xlabel('log(Lasso Alpha)')
plt.ylabel('Contribution')
plt.title('Lasso Coefficient Path')
plt.legend()
plt.show()
# 打印结果
print(f'最佳Lasso系数: {best_alpha}')
for index, feature in enumerate(data.columns[:-1]):
print(f'{feature}的贡献度: {coefficients[index]}')
```
非常抱歉给你带来了困扰,希望这次的修改可以解决问题。如果还有其他问题,请随时提问。
阅读全文