Использование набора данных радужной оболочки от sklearn. Я разделяю данные, применяя Perceptron, записывая оценки в словарь, который сопоставляет размер выборки (ключ), используемый для подбора модели, к соответствующей оценке (обучающие и тестовые оценки в виде кортежа)
Это дает 3 словаря, так как я запускаю цикл 3 раза. Как найти среднее значение результатов за 3 итерации? Я пробовал хранить словари в списке и в среднем, но это не сработало
например: если словарь
{21: (0.85, 0.82), 52: (0.80, 0.62), 73: (0.82, 0.45), 94: (0.81, 0.78)}
{21: (0.95, 0.91), 52: (0.80, 0.89), 73: (0.84, 0.87), 94: (0.79, 0.41)}
{21: (0.809, 0.83), 52: (0.841, 0.77), 73: (0.84, 0.44), 94: (0.79, 0.33)}
Вывод должен быть {21:(0.869,0.853),52.....}
, где первый элемент значения для ключа 21 равен 0,85+0,95+0,809/3, а второй равен 0,82+0,91+0,83/3
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
from sklearn.model_selection import train_test_split
score_list=shape_list=[]
iris = load_iris()
props=[0.2,0.5,0.7,0.9]
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
y=df[list(df.loc[:,df.columns.values =='target'])]
X=df[list(df.loc[:,df.columns.values !='target'])]
# number of trials
for i in range(3):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, train_size=0.7)
results = {}
for i in props:
size = int(i*len(X_train))
ix = np.random.choice(X_train.index, size=size, replace = False)
sampleX = X_train.loc[ix]
sampleY = y_train.loc[ix]
#apply model
modelP = Perceptron(tol=1e-3)
modelP.fit(sampleX, sampleY)
train_score = modelP.score(sampleX,sampleY)
test_score = modelP.score(X_test,y_test)
#store in dictionary
results[size] = (train_score, test_score)
print(results)
Кроме того, если кто-то разбирается в статистике, есть ли способ найти стандартную ошибку для испытаний и распечатать среднюю стандартную ошибку для каждого размера выборки (ключ словаря)?
Мой блокнот Jupyter возвращает ошибку в строке 11
df[[f'TrS{c}', f'TeS{c}']] = pd.DataFrame(df[c].tolist(), index= df.index) ^ SyntaxError: недопустимый синтаксис
@freshman_2021 какая версия питона и какая версия панд?
Панды: 0.23.4 Python: 3.5.2
@tdy Я думаю, что это f-строки, для них требуется python >= 3.6
@freshman_2021freshman_2021 Я добавил версии, в которых тестировался. Срок службы Python 3.5 истек, а текущая версия pandas — 1.3.1. Вы можете использовать
df[['TrS{}'.format(c), 'TeS{}'.format(c)]] = pd.DataFrame(df[c].tolist(), index= df.index)
, но вам следует подумать о новом инструменте.На самом деле я нахожусь в процессе приобретения нового ноутбука и в настоящее время работаю над арендованным устройством... Я отвлекаюсь.. Это работает как шарм... Большое спасибо.
@freshman_2021 Когда вы устанавливаете Python на свой новый компьютер, самым простым способом будет дистрибутив Anaconda.