Как предсказать компоненты неизвестной функции в scikit-learn? - PullRequest
0 голосов
/ 13 января 2019

У меня есть несколько графиков. Все эти графики являются функцией двух параметров ( Альфа и Бета ). Однако эта функция не известна. Единственное, что я знаю, это то, что при изменении альфы и беты форма функции меняется, но не ясно, как эти два параметра влияют на форму этой функции.

Я хочу использовать инструмент машинного обучения (предпочтительно scikit-learn) для прогнозирования компонентов Альфа и Бета путем предоставления произвольного графика. Я собираюсь предоставить более подробную информацию: Допустим, у меня есть 3 графика на основе точек, хранящихся в 3 текстовых файлах:

#First graph: 1.txt
89.3131996411674    0.0                 
86.31206459803472   1.9218574062324632  
81.87220673358236   4.212444252488191   
76.41926314984194   7.090515235715248   
69.70749592038558   10.46295619504502   
4.695619238294171   42.982945242832166 

#Second graph: 2.txt
89.31085880364263   0.0                 
86.14246621045181   0.11975843148903698 
81.48739328101496   0.7686454222842645  
75.88152851199536   1.501591710302762   
69.15242620019211   4.034900351905526   
4.674145681785713   41.09359256010945

#Third graph: 3.txt
89.30979468139782   0.0                 
86.05550911873416   -0.9850540767366983 
81.20598538751082   -1.1003291465972356 
75.39779664162057   -2.714132118366186  
68.62777149709575   -1.3767373919651047   
4.653517556961358   39.28302423686896 

Теперь, если я построю их, используя этот код:

import matplotlib.pyplot as plt
plt.plotfile('1.txt', delimiter=' ', cols=(0, 1),linestyle='--',linewidth=3,color='k',label=r'$1:Alpha\/\/=20\/\/and\/\/Beta\/\/=5$')
plt.plotfile('2.txt',  delimiter=' ', cols=(0, 1),linestyle='-',linewidth=3,color='m',label=r'$2:Alpha\/\/=30\/\/and\/\/Beta\/\/=0.3$',newfig=False)
plt.plotfile('3.txt', delimiter=' ', cols=(0, 1),linestyle='-.', linewidth=3,color='r',label=r'$3:Alpha\/\/=40\/\/and\/\/Beta\/\/=0.2$',newfig=False)
lg=plt.legend(ncol=1, loc=2, fontsize=13)
plt.xlabel(r'$\mathrm{X}$', fontsize=16)
plt.ylabel(r'$\mathrm{Y}$', fontsize=16)
axes = plt.gca()
plt.gca().invert_xaxis()
plt.tick_params(axis='both', which='major', labelsize=13)
plt.show()

Результаты будут:

a busy cat Теперь я хочу дать произвольный график (точки) и ожидаю, что алгоритм машинного обучения будет предсказывать коэффициенты Альфа и Бета. Я должен упомянуть, что я предоставил только 3 графика здесь для простоты, в то время как в действительности у меня есть более 1000 графиков и все графики лежат между graph.1 и graph.3 . Например, если я даю в коде те же точки, что и на рисунке 3, и прошу предсказать альфа и бета, я ожидаю получить:

Alpha = 40
Beta = 0.2

Или, если я даю в коде те же точки, что и на рис. 1, и прошу предсказать альфа и бета, я получу:

Alpha = 20
Beta = 5

Я не знаю, может ли машинное обучение сделать это для меня или нет, поскольку я не знаю, как именно Альфа и Бета влияют на форму графика. Я только знаю, что графики зависят от этих двух компонентов, но я не знаю, что это за функция

Я надеялся, что если я предоставлю разумное количество графиков (в качестве входных данных) для алгоритма в качестве обучающего набора, код сможет предсказать (оценить) альфа и бета для произвольно заданных точек (график).

Заранее спасибо за ваше время и помощь!

1 Ответ

0 голосов
/ 13 января 2019

Из объяснения вашей проблемы неясно, есть ли у вас значения альфа и бета для каждого из графиков 1000 , я полагаю, что у вас их нет, у вас есть только значения. Если это так, я предполагаю, что alpha = 0.4, а beta = 0.2 сверху - всего лишь несколько фиктивных значений.

Если вы предполагаете, что ваш график является прямой линией, вы можете использовать линейную регрессию для создания оценки параметров a и b для данного графика, которые соответствуют перехватчику (a в уравнении ниже) и коэффициенту (b в уравнении ниже). Таким образом вы узнаете, как a и b влияют на форму функции для данного графа. Другими словами, вы узнаете, что такое функция.

enter image description here

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

df = pd.read_csv("1.txt", delimiter="\t")
x = df.x.values.reshape(-1, 1)
y = df.y.values.reshape(-1, 1)
model = LinearRegression(fit_intercept=True)
model.fit(x, y)
# This corresponds to a and b from equation above
print(model.coef_, model.intercept_)

Однако, если ваш график не является прямой линией, вы можете использовать полиномиальную регрессию. Допустим, вы думаете, что ваша функция является полиномом 2-й степени, тогда у вас будут следующие уравнения:

enter image description here

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

df = pd.read_csv("1.txt", delimiter="\t")
x = df.x.values.reshape(-1, 1)
y = df.y.values.reshape(-1, 1)
poly = PolynomialFeatures(degree=2) 
X_ = poly.fit_transform(x) # Transforming into degree two polynomial
model = LinearRegression(fit_intercept=True)
model.fit(X_, y)
# This corresponds to a,b and c from equation above
print(model.coef_, model.intercept_)

Вы можете использовать полиномы еще более высокой степени, если хотите, они будут соответствовать еще более сложным функциям.

Делая все это, вы узнаете параметры, которые нужно знать для данного x, что является выходным значением y . Это не то, что вы назвали проблемой. Вы хотите узнать, что такое alpha и beta .

Если бы вы внимательно следили за тем, что я написал, вы могли бы выяснить, что альфа и бета - это некоторые параметры (такие как a, b, c и т. Д.), Но для того, чтобы выяснить их приблизительное значение, вы должны знать какая степень полиномиальной функции использовалась, а затем выяснить, какой из используемых параметров (a, b, c и т. д.) alpha и beta .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...