如何修正指标

2024-10-03 17:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python-Scikit-learn实现的Logistic回归算法,根据花瓣的长度和宽度对虹膜数据集中的三种花(刚毛花、花色花、处女花)进行分类。

请参阅附件-

from sklearn import datasets

#load data
iris=datasets.load_iris()
X=iris.data[:,[2,3]]
y=iris.target
from sklearn.model_selection import train_test_split
X_train, X_test,y_train, y_test=train_test_split(X,y,test_size=0.3, random_state=0,stratify=y)
#feature scaling
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
sc.fit(X_train)
X_train_std=sc.transform(X_train)
X_test_std=sc.transform(X_test)
#Logistic regression
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
C1=[]
A=[]
C1=[0.01,0.1,1,10,100,1000]
for i in range(len(C1)):
    lr=LogisticRegression(C=C1[i], random_state=0)
    lr.fit(X_train_std,y_train)
    y_pred=lr.predict(X_test_std)
    A[i].append(accuracy_score(y_test,y_pred))

#draw figure
import matplotlib.pyplot as plt
plt.plot(C1,A)
plt.title('Logistic Regression')
plt.xlabel('C')
plt.ylabel('Accuracy')
plt.show()

请看图片-enter image description here . 你知道吗

这是错误-

runfile('C:/Users/HSIPL/Desktop/testttttttttttttttttt.py', wdir='C:/Users/HSIPL/Desktop')
Reloaded modules: __mp_main__
Traceback (most recent call last):

  File "<ipython-input-4-94a347d3dde0>", line 1, in <module>
    runfile('C:/Users/HSIPL/Desktop/testttttttttttttttttt.py', wdir='C:/Users/HSIPL/Desktop')

  File "C:\Users\HSIPL\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
    execfile(filename, namespace)

  File "C:\Users\HSIPL\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/HSIPL/Desktop/testttttttttttttttttt.py", line 26, in <module>
    A[i].append(accuracy_score(y_test,y_pred))

IndexError: list index out of range

Tags: infrompytestimportiristrainplt
2条回答

main:问题已接近train_test_split(X,y,test_size=0.3, random_state=0)您无需执行stratified sampling

其他:您需要将scale更改为log。和A.append代替A[i].append

from sklearn import datasets

import numpy as np
#load data
iris=datasets.load_iris()
X=iris.data[:,[2,3]]
y=iris.target
from sklearn.model_selection import train_test_split
X_train, X_test,y_train, y_test=train_test_split(X,y,test_size=0.3, random_state=0)
#feature scaling
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
sc.fit(X_train)
X_train_std=sc.transform(X_train)
X_test_std=sc.transform(X_test)
#Logistic regression
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
A=[]
C1=[0.01,0.1,1,10,100,1000]
for i in range(len(C1)):
    lr=LogisticRegression(C=C1[i], random_state=0)
    lr.fit(X_train_std,y_train)
    y_pred=lr.predict(X_test_std)
    A.append(accuracy_score(y_test,y_pred))

#draw figure
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(C1,A)
ax.set_xscale("log")
new_tick_label  = ['{:1.2f}'.format(x) for x in C1]
ax.set_xticks(C1)
ax.set_xticklabels(new_tick_label)

ax.set_yticks(np.arange(.6,1.01,.05))
plt.grid(True)

plt.title('Logistic Regression')
plt.xlabel('C')
plt.ylabel('Accuracy')
plt.show()

通过执行A[i].append(accuracy_score(y_test,y_pred)),您的意思是A本身包含lists,并试图将一个分数附加到每个分数上。你知道吗

但是,A是一个空的list,因此您只需要A.append(accuracy_score(y_test,y_pred))

相关问题 更多 >