#python #scikit-learn
#python #scikit-учиться
Вопрос:
Используя алгоритм логистической регрессии, реализованный в Python Scikit-learn, классифицируйте три типа цветов (Setosa, Versicolor, Virgin) в наборе данных Iris в соответствии с длиной и шириной лепестка.
Могу ли я узнать, как исправить кодировку, см. прикрепленный файл —
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()
Пожалуйста, посмотрите на картинку — введите описание изображения здесь
.
Вот ошибка —
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:UsersHSIPLAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 668, in runfile
execfile(filename, namespace)
File "C:UsersHSIPLAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.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
Ответ №1:
Выполняя A[i].append(accuracy_score(y_test,y_pred))
, вы говорите, что это A
само по себе содержит lists
и пытаетесь добавить по одному значению к каждому из них.
Однако, A
является пустым list
, и, соответственно, вы просто хотите A.append(accuracy_score(y_test,y_pred))
Комментарии:
1. Ваш ответ правильный, но картинка по-прежнему неправильная — скажите мне, что произошло?
2. @vokoyo что вы подразумеваете под «неправильным»? Пожалуйста, предоставьте ожидаемый результат.
3. Пожалуйста, посмотрите на картинку — ссылку выше
4. Пожалуйста, посмотрите на картинку — введите описание изображения здесь
5. @vokoyo поскольку мой ответ решил проблему, с которой вы столкнулись, пожалуйста, примите его. Опять же, вам следует задать новый вопрос относительно масштаба графика, поскольку это вопрос, отличный от темы этого вопроса.
Ответ №2:
главное: проблема была рядом, 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()
Комментарии:
1. Я получаю картинку, но все еще не очень похожую на прикрепленное изображение — почему?
2. @vokoyo пожалуйста, проверьте обновления сейчас и примите ответ, если это решит вашу проблему.
3. Могу ли я получить ваш контактный email?