Передача фрейма данных в виде данных поезда и нескольких столбцов фрейма данных в качестве меток поезда в модель прогнозирования машинного обучения
У меня есть датафрейм вроде следующего:
BankNum | FirstName | LastName | ID |
00987772 | Michael | Brown | 123 |
00987772 | Bob | Brown | 123 |
00987772 | Michael | Mooney | 123 |
00987772 | Raven | Mallik | 245 |
00982122 | Karim | Hareche | 564 |
Я делаю следующее, чтобы получить два словаря:
cols = [
{'col': 'BankNum', 'func': lambda x: x.value_counts().to_dict()},
{'col': 'FirstName', 'func': pd.Series.nunique},
{'col': 'LastName', 'func': pd.Series.nunique}]
d = df.groupby('Transporter ID').apply(lambda x: tuple(c['func'](x[c['col']]) for c in cols)).to_dict()
cols1 = ['ID']
df2 = df.groupby('BankNum').apply(lambda x: tuple(x[c].nunique() for c in cols1))
d1 = df2.to_dict()
где
d ={ 123 : ({00987772: 3}, 2,2), 245: ({00987772: 1}, 1,1), 564: ({00982122: 1}, 1,1)}
d1 = {00987772: (2,), 00982122:(1,)}
Далее я делаю следующее (ниже приведен только соответствующий код, есть и другие вещи, которые я делаю, которые я удалил из кода ниже:
same_banknum={}
l=[]
w=[]
m = v[2].values()
h2 = sum(i > 6 for i in m)
mod2 = sum(i in [5,6] for i in m)
l2 = sum(i in [3,4] for i in m)
if h2 != 0:
for k2, v2 in v[2].items():
if v2 > 6:
l.append(k2)
w.append(v2)
new_l=[]
for i in l:
v3 = d1.get(i)
new_l.append(v3[0])
h3 = sum(i > 8 for i in new_l)
m3 = sum(i in [5,6,7,8] for i in new_l)
l3 = sum(i in [3,4] for i in new_l)
c=[]
if h3 != 0:
for g in new_l:
if g > 8:
c.append(g)
wt = sum(c)
same_banknum[k]= ("High", wt)
elif m3 != 0:
for g in new_l:
if g in [5,6,7,8]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Moderate", wt)
elif l3 != 0:
for g in new_l:
if g in [3,4]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Low", wt)
else:
same_banknum[k]= ("Low", 0.0)
elif mod2 != 0:
for k2, v2 in v[2].items():
if v2 in [5,6]:
l.append(k2)
w.append(v2)
new_l=[]
for i in l:
v3 = d1.get(i)
new_l.append(v3[0])
h3 = sum(i > 8 for i in new_l)
m3 = sum(i in [5,6,7,8] for i in new_l)
l3 = sum(i in [3,4] for i in new_l)
c=[]
if h3 != 0:
for g in new_l:
if g > 8:
c.append(g)
wt = sum(c)
same_banknum[k]= ("High", wt)
elif m3 != 0:
for g in new_l:
if g in [5,6,7,8]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Moderate", wt)
elif l3 != 0:
for g in new_l:
if g in [3,4]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Low", wt)
else:
same_banknum[k]= ("Low", 0.0)
elif l2 != 0:
for k2, v2 in v[2].items():
if v2 in [3,4]:
l.append(k2)
w.append(v2)
new_l=[]
for i in l:
v3 = d1.get(i)
new_l.append(v3[0])
h3 = sum(i > 8 for i in new_l)
m3 = sum(i in [5,6,7,8] for i in new_l)
l3 = sum(i in [3,4] for i in new_l)
c=[]
if h3 != 0:
for g in new_l:
if g > 8:
c.append(g)
wt = sum(c)
same_banknum[k]= ("High", wt)
elif m3 != 0:
for g in new_l:
if g in [5,6,7,8]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Moderate", wt)
elif l3 != 0:
for g in new_l:
if g in [3,4]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Low", wt)
else:
same_banknum[k]= ("Low", 0.0)
else:
for k2, v2 in v[2].items():
if v2 in [1,2]:
l.append(k2)
new_l=[]
for i in l:
v3 = d1.get(i)
new_l.append(v3[0])
h3 = sum(i > 8 for i in new_l)
m3 = sum(i in [5,6,7,8] for i in new_l)
l3 = sum(i in [3,4] for i in new_l)
c=[]
if h3 != 0:
for g in new_l:
if g > 8:
c.append(g)
wt = sum(c)
same_banknum[k]= ("High", wt)
elif m3 != 0:
for g in new_l:
if g in [5,6,7,8]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Moderate", wt)
elif l3 != 0:
for g in new_l:
if g in [3,4]:
c.append(g)
wt = sum(c)
same_banknum[k]= ("Low", wt)
else:
same_banknum[k]= ("Low", 0.0)
чтобы получить словарь, как это:
same_banknum = {123: ('Low', 0.6), 245: ('Low', 0.6), 564: ('Low', 0.0)}
Словарь same_banknum выполняет вышеуказанные вычисления и выясняет, совпадает ли BankNum
существует для нескольких идентификаторов, а затем назначает их High
, Low
, Moderate
значение вместе с весом, чтобы быть верным ему, чтобы дать нам словарь.
Который я могу преобразовать в фрейм данных, как показано ниже:
df1 = pd.DataFrame.from_dict(same_banknum, orient='index').reset_index()
df1.columns = ['ID','SameBankNum_Val','SameBankNum_Wt']
который дает:
ID | SameBankNum_Val | SameBankNum_Wt
123 | Low | 0.6
245 | Low | 0.6
564 | Low | 0.0
Что я хочу сделать, так это то, что вместо того, чтобы снова и снова выполнять это вычисление для каждого нового набора данных, я хочу использовать машинное обучение для построения прогностической модели, которая предсказывает вышеизложенное. SameBankNum_Val
& SameBankNum_Wt
для новых идентификаторов (тестовые данные).
Я мог бы добавить SameBankNum_Val
& SameBankNum_Wt
столбцы к указанному выше кадру. Но я хочу знать следующее: как передать несколько столбцов ( BankNum
, FirstName
, LastName
, ID
) (из кадра данных 1 сверху) в качестве данных поезда и нескольких столбцов ( SameBankNum_Val
, SameBankNum_Wt
) (из Dataframe 2 выше) как метка поезда в модели машинного обучения?
Кроме того, будет ли модель машинного обучения достаточно точной в отношении того, когда ее давать? High
, Low
или же Moderate
стоимость и какой вес без выполнения этого длинного вычисления снова и снова? По этому вопросу, я думаю, мне нужно сначала протестировать несколько моделей.
Пожалуйста помоги! Спасибо!