Привет я делаю стандартную мягкую в C ++ с QT.
Мне нужно сделать много расчетов по таблице с выводом многомерного кластерного анализа:
Var1, Var2, Var3, .. VarN, k2, k3, k4 … kn
где Var1-n — переменные обучения,
и k2, чтобы узнать кластеризацию кластера.
Пример таблицы:
Var1, Переменная2, Var3, var4, k2, k3, k4, k5, k6
3464.57,2992.33,2688.33,504.79,2,3,2,3,2
2895.32,3365.35,2824.35,504.86,1,2,3,2,6
2249.32,3300.19,2382.19,504.92,2,1,4,3,4
3417.81,3311.04,2426.04,504.97,1,2,2,5,2
3329.66,3497.14,2467.14,505.03,2,2,1,4,2
3087.85,3653.53,2296.53,505.09,2,1,2,3,4
Хранилище c ++ будет определено так:
Таблица QList;
Struct record
{
QList<double> vars;
QList<int> cluster;
}
Мне нужно рассчитать общую сумму, внутри группы и между квадратом суммы группы.
https://en.wikipedia.org/wiki/F-test
Итак, для примера для расчета WSS для Var1 и k2 необходимо:
в псевдокоде:
получить размер каждой группы:
считать (*) группу по (k2),
рассчитать среднее значение для каждой группы:
суммируйте (Var1) группу по (k2), а затем разделите каждую на предыдущее количество.
вычислим разницу:
POW ((xgroup1-xmeangroup1), 2)
и многие другие операции ….
Какие альтернативы будут иметь более простую и мощную кодификацию:
1) Создайте таблицу MySQL на лету и выполните операции SQL.
2) Используйте LINQ, но я не знаю, есть ли у QT класс QTLinq.
3) Попробуйте сделать через Python эквиваленты методов LINQ,
(как происходит взаимодействие между QT и Python, я вижу, что Qgis имеет много плагинов, написанных на Python)
Также в моем приложении нужно много других исчислений.
Я надеюсь, что будет ясно.
Привет
Через некоторое время я отвечаю самому себе,
решение было сделано в Python с помощью Pandas.
Эта ссылка очень полезна:
Перебирая группы по: http://pandas.pydata.org/pandas-docs/stable/groupby.html
Также книга «Питон для анализа данных, Вест Маккинни», страница 255
Это видео показывает, как сделать расчет:
ANOVA 2: Расчет SSW и SSB (общая сумма квадратов внутри и между) | Ханская академия
https://www.youtube.com/watch?v=j9ZPMlVHJVs
def getDFrameFixed2D():
y = np.array([3,2,1,5,3,4,5,6,7])
k = np.array([1,1,1,2,2,2,3,3,3])
clusters = pd.DataFrame([[a,b] for a,b in zip(y,k)],columns=['Var1','K2'])
# print (clusters.head()) print("shape(0):",clusters.shape[0])
return clusters
X2D=getDFrameFixed2D()
MainMean = X2D['Var1'].mean(0)
print("Main mean:",MainMean)
grouped = X2D['Var1'].groupby(X2D['K2'])
print("-----Iterating Over Groups-------------")
Wss=0
Bss=0
for name, group in grouped:
#print(type(name))
#print(type(group))
print("Group key:",name)
groupmean = group.mean(0)
groupss = sum((group-groupmean)**2)
print(" groupmean:",groupmean)
print(" groupss:",groupss)
Wss+= groupss
Bss+= ((groupmean - MainMean)**2)*len(group)
print("----------------------------------")
print("Wss:",Wss)
print("Bss:",Bss)
print("T=B+W:",Bss+Wss)
Tss = np.sum((X-X.mean(0))**2)
print("Tss:",Tss)
print("----------------------------------")
[/code]
Я уверен, что это можно сделать с агрегатами (лямбда-функционал) или применить.
Но я не понимаю, как
(если кто-то знает, пожалуйста, напишите здесь)
Привет
Других решений пока нет …