Перепрыгнеть в содержание


- - - - -

Теннис и вероятность исхода в 85.27%. Ищу людей, для накопления на старость.


39 ответов в эту тему

#21 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 31 May 2016 - 10:32

СообщенияNicolas, on 31 May 2016 - 09:51, сказал:

ясно , где можно скачать вашу программу ? она платная ?
Бесплатно тут https://basegroup.ru/deductor/download
Но там, как я говорил, нет доступа к весам и предобработчику. Прога генерит жёсткую архитектуру со всеми связями (сами вы можете построить сеть с любой архитектурой связей между нейронами и слоями). Другой недостаток--придётся гонять данные туды-сюды ручёнками (вам надо сценарий там написать а потом грузить данные пары(или пар...допустим на какой-то тур или ещё там чё...)для прогноза....
Вы лучше начните в екселе строить сеть (тормозить её можно будет кнопкой esc причём "поиск решения" при желании можно запустить из VBA)

Отредактировано Bambuk, 31 May 2016 - 10:34.


#22 OFFLINE   Nicolas

    Специалист


  • Участник II
  • ПипПипПип
  • 141 сообщения
23

Добавлено 31 May 2016 - 10:48

СообщенияBambuk, on 31 May 2016 - 10:32, сказал:

Бесплатно тут https://basegroup.ru/deductor/download
Но там, как я говорил, нет доступа к весам и предобработчику. Прога генерит жёсткую архитектуру со всеми связями (сами вы можете построить сеть с любой архитектурой связей между нейронами и слоями). Другой недостаток--придётся гонять данные туды-сюды ручёнками (вам надо сценарий там написать а потом грузить данные пары(или пар...допустим на какой-то тур или ещё там чё...)для прогноза....
Вы лучше начните в екселе строить сеть (тормозить её можно будет кнопкой esc причём "поиск решения" при желании можно запустить из VBA)
да сейчас читаю про вариант эксел , позже отпишусь о результатах ! знаю одного человека он обучил свою сеть на теннис и нагибает буков по тихому

#23 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 31 May 2016 - 10:56

СообщенияNicolas, on 31 May 2016 - 10:48, сказал:

да сейчас читаю про вариант эксел , позже отпишусь о результатах ! знаю одного человека он обучил свою сеть на теннис и нагибает буков по тихому
Вообще-то всё не так просто как кажется...типа сделал...и нагибай....там по идее надо генерить целые пакеты НС с разной архитектурой и входными сигналами разными.
Потом гонять на тестах и смотреть как надо принимать решение. Сигнал может быть и сильный, но Вы же должны смотреть в контексте баланса всё это дело...Мы тут эксперементик проводили без особых изошрений и корячения...но выбрали---куда ставить и при каких уровнях рез тут можете посмотреть Ссылка Здесь

делал я как раз на сети проги к которой дал ссылку...но там тема вообще-то не об этом... и входные сигналы я там особо-то не подбирал--взял то что удобно было загрузить с сайтов статистики.

#24 OFFLINE   pin

    Специалист


  • Участник II
  • ПипПипПип
  • 156 сообщения
13
  • Местоположениеhell

Добавлено 31 May 2016 - 18:05

СообщенияNicolas, on 31 May 2016 - 10:48, сказал:

да сейчас читаю про вариант эксел , позже отпишусь о результатах ! знаю одного человека он обучил свою сеть на теннис и нагибает буков по тихому

Он руками совершает ставки или же автоматически? Если автоматически, то на каком буке?

#25 OFFLINE   Nicolas

    Специалист


  • Участник II
  • ПипПипПип
  • 141 сообщения
23

Добавлено 01 June 2016 - 06:06

Сообщенияpin, on 31 May 2016 - 18:05, сказал:

Он руками совершает ставки или же автоматически? Если автоматически, то на каком буке?
Ты выше пропустил мой вопрос )) так что и твой проехали ..

#26 OFFLINE   pin

    Специалист


  • Участник II
  • ПипПипПип
  • 156 сообщения
13
  • Местоположениеhell

Добавлено 01 June 2016 - 08:10

СообщенияNicolas, on 01 June 2016 - 06:06, сказал:

Ты выше пропустил мой вопрос )) так что и твой проехали ..

Простите, не заметил. Смотря, что считать опытом. Если опыт это профит, тогда он очень сука маленький.
ICQ есть?

#27 OFFLINE   serg11231

    Специалист


  • mp
  • 1179 сообщения
283

Добавлено 01 June 2016 - 08:17

pin, я в общем уже в чат ответил, хотя по идее все к этой теме оносится

#28 OFFLINE   Nicolas

    Специалист


  • Участник II
  • ПипПипПип
  • 141 сообщения
23

Добавлено 01 June 2016 - 12:02

Сообщенияpin, on 01 June 2016 - 08:10, сказал:

Простите, не заметил. Смотря, что считать опытом. Если опыт это профит, тогда он очень сука маленький.
ICQ есть?
есть icq .. куда стучать ?

#29 OFFLINE   pin

    Специалист


  • Участник II
  • ПипПипПип
  • 156 сообщения
13
  • Местоположениеhell

Добавлено 01 June 2016 - 13:01

657045037

#30 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 03 June 2016 - 09:24

Программисты, подскажите как подключить к ВБА екселя вот эту библиотеку www.alglib.net/translator/man/manual.vb6.html#_faq там вроде что-то есть по НС

Ситуация выглядит так--я скачал то чё там предлагают по VB_6 а что далее? ну распаковал я всё в папку..и теперь сижу чешу репу...

Отредактировано Bambuk, 03 June 2016 - 09:25.


#31 OFFLINE   pin

    Специалист


  • Участник II
  • ПипПипПип
  • 156 сообщения
13
  • Местоположениеhell

Добавлено 03 June 2016 - 09:45

СообщенияBambuk, on 03 June 2016 - 09:24, сказал:

Программисты, подскажите как подключить к ВБА екселя вот эту библиотеку www.alglib.net/translator/man/manual.vb6.html#_faq там вроде что-то есть по НС

Ситуация выглядит так--я скачал то чё там предлагают по VB_6 а что далее? ну распаковал я всё в папку..и теперь сижу чешу репу...

Я на питоне кодю. Тут не подскажу.

#32 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 03 June 2016 - 10:00

Сообщенияpin, on 03 June 2016 - 09:45, сказал:

Я на питоне кодю. Тут не подскажу.
там вообще-то есть и для питона и для С+ и других языков....может кому пригодится?.... Там есть некоторые функции и подпрограммы которые можно в беттинге использовать...допустим деление на группировки с помощью К-средних итд...есть много функций с матрицами и разложениями (типа сингулярного итд)

Отредактировано Bambuk, 03 June 2016 - 10:02.


#33 OFFLINE   denvb

    Специалист


  • Участник II
  • ПипПипПип
  • 382 сообщения
90

Добавлено 03 June 2016 - 12:41

СообщенияBambuk, on 03 June 2016 - 09:24, сказал:

Программисты, подскажите как подключить к ВБА екселя вот эту библиотеку www.alglib.net/translator/man/manual.vb6.html#_faq там вроде что-то есть по НС

Ситуация выглядит так--я скачал то чё там предлагают по VB_6 а что далее? ну распаковал я всё в папку..и теперь сижу чешу репу...
Собственно надо импортировать в свой проект нужные bas-файлы из src, смотря какие функции вам нужны, правый клик на имени модуля -> Import File. Боль понятна – это надо будет повторять в каждом проекте и файлов там 102 штуки.

Подумал, придумал такой вариант (степень удобства не известна);

1. Качаем файл, распаковать, открыть в экселе
2. Сохранить как... -> Надстройка Excel (*.xlam) при этом папка сохранения автоматически сменится на что-то такое "C:\Users\...\AppData\Roaming\Microsoft\AddIns" -> Сохранить
3. Меню "Разработчик" -> "Надстройки" -> Ставим галку "Alglibvba_2.6.0" -> OK
4. В редакторе скриптов (VBE) идём Tools -> References, отмечаем AlgLibVBA

Не забывайте, что функции не работают с клетками/диапазонами, нужно будет готовить им родные массивы/матрицы. Как-то так

#34 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 03 June 2016 - 14:28

Сообщенияdenvb, on 03 June 2016 - 12:41, сказал:

Собственно надо импортировать в свой проект нужные bas-файлы из src, смотря какие функции вам нужны, правый клик на имени модуля -> Import File. Боль понятна – это надо будет повторять в каждом проекте и файлов там 102 штуки.

Подумал, придумал такой вариант (степень удобства не известна);

1. Качаем файл, распаковать, открыть в экселе
2. Сохранить как... -> Надстройка Excel (*.xlam) при этом папка сохранения автоматически сменится на что-то такое "C:\Users\...\AppData\Roaming\Microsoft\AddIns" -> Сохранить
3. Меню "Разработчик" -> "Надстройки" -> Ставим галку "Alglibvba_2.6.0" -> OK
4. В редакторе скриптов (VBE) идём Tools -> References, отмечаем AlgLibVBA

Не забывайте, что функции не работают с клетками/диапазонами, нужно будет готовить им родные массивы/матрицы. Как-то так
den, спасибо за разъяснение...я по началу примерно так и подумал---типа даже тупо войти в файл (допустим блокнотом) тупо выделить код нужной функции или программы и перенести в проект...как-то так(если совсем примитивно).... а далее как Вы пояснили---готовить отдельно все массивы и данные перенося их "внутрь VBA excel" забирая из ячеек если они именно там...(допустим можно наверно ссылку организовать промежуточную и через неё получать какие-то данные)
Гимор конечно что я в самом коде VBA не всё секу...

Отредактировано Bambuk, 03 June 2016 - 14:32.


#35 OFFLINE   denvb

    Специалист


  • Участник II
  • ПипПипПип
  • 382 сообщения
90

Добавлено 03 June 2016 - 15:50

СообщенияBambuk, on 03 June 2016 - 14:28, сказал:

готовить отдельно все массивы и данные перенося их "внутрь VBA excel" забирая из ячеек если они именно там
нашёл примеры обёрток для некоторых матричных функций (в модуле AL_MatrixFunc), на вход получают диапазон. Прилично писанины, если вам придётся так для каждой делать. Наверно повторюсь, но вам бы посмотреть на что-то другое, писать на VBA - это такое уныние, тот же питон говорят очень прост и математики под него вдоволь.

#36 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 03 June 2016 - 16:35

Сообщенияdenvb, on 03 June 2016 - 15:50, сказал:

нашёл примеры обёрток для некоторых матричных функций (в модуле AL_MatrixFunc), на вход получают диапазон. Прилично писанины, если вам придётся так для каждой делать. Наверно повторюсь, но вам бы посмотреть на что-то другое, писать на VBA - это такое уныние, тот же питон говорят очень прост и математики под него вдоволь.
Да..гимор конечно...и вот эта декларация у меня конечно не работает....
Declare Function vbrmatinv Lib "..\VBA-DLL\Alglib2.dll" (ByRef A2 As Double, ByVal M As Long) As Long.

#37 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 04 June 2016 - 07:19

В помощь бамбукам в программировании (типа меня) решил выложить кусок кода по кластеризации с помощью К-средних.

Кто мучает зад в екселе может пригодится. Суть примерно такова на пальцах---есть у нас какие-то характеристики чего-то там ХЗ ...допустим команд или теннисистов и прочих...истов.
для примера покажу на 2-ух характеристиках (это первичные голоспособности или можно сказать МО голов в матче для дом-ком. и гостя)
вот типа такая таблица в екселе (кусок начала)
N G1 G2
1 1,437578815 2,162629758
2 2,398831873 0,824742268
3 0,858085809 0,520833333
4 1,759259259 1,126760563
5 0,903387704 1,058965102
6 1,259445844 1,941457587
7 1,861252115 0,641025641
8 1,457541191 0,871080139
9 1,048832272 1,28113879
10 1,896774194 1,413427562
11 3,485424588 1,26984127
12 0,696517413 1,297577855
13 1,070528967 1,573426573

итд.

Для макроса надо указать диапазон --указываем в месте с номером записи (напротив этого номера макрос потом вернёт на новом листе номер кластера и номера можно будет перенести в таблицу ретро данных при желании)...кроме того что собственно нам и надо (так как номера мы по идее потом и сами сможем вычислить)
вернёт центройды кластеров которые можно забить в другой макрос или встроенную пользовательскую функцию для вычисления номера текущей пары (которой в БД ретро нет)....
Короче для примера этого три столбика указываем макросу вместе с названиями столбцов (там выскакивает форма и в ней укажем).
вернёт вот так
Row Title Centroid
1 22
2 25
3 3
4 4
5 9
6 6
7 7
8 30
9 24
10 4
11 11
12 12
13 31
14 25
Итд
………


И центройды

G1 G2
Centroid 1 1,803281661 2,724977774
Centroid 2 2,531964172 0,462462353
Centroid 3 0,766622408 0,538307801
Centroid 4 1,817694831 1,258800239
Centroid 5 0,613161496 0,929501544
Centroid 6 1,143208693 1,950110175
Centroid 7 1,987655371 0,48704115
Centroid 8 1,329178087 0,768057358
Centroid 9 0,860811549 1,179025478
Centroid 10 2,125100911 1,700579006
Centroid 11 3,297781929 1,183288055
Centroid 12 0,56341852 1,44774447
Centroid 13 0,676079708 2,109946984
Centroid 14 2,700693921 0,881581638
Centroid 15 1,138309219 0,5153572
Centroid 16 2,561895645 1,338201546
Centroid 17 2,823474519 1,906330779
Centroid 18 1,138822493 2,399598699
Centroid 19 1,287469701 1,623651071
Centroid 20 1,908009282 0,896526437
Centroid 21 1,668020355 0,699246295
Centroid 22 1,649808326 2,059822317
Centroid 23 0,984029117 0,837128352
Centroid 24 1,103769405 1,359760858
Centroid 25 2,272613552 0,774294554
Centroid 26 2,191999879 1,176660469
Centroid 27 0,745261784 2,844384237
Centroid 28 1,426667124 1,283051046
Centroid 29 4,312170305 0,776953678
Centroid 30 1,543347751 1,000982379
Centroid 31 0,874060958 1,642373355
Centroid 32 1,64611422 1,58585708
Centroid 33 1,059077433 3,82291582
Centroid 34 1,495604132 0,439407432
Centroid 35 1,199098998 1,05285298
Centroid 36 3,2132208 0,573182037

Можно конечно больше параметров использовать для ваших нужд(это просто пример)
Считает долго но вроде работает нормально (качество деления ХЗ как проверить) но вот по приведённому примеру сами смотрите (вроде приемлемо)...
далее уже для кластеров можно строить например нейросети или регрессионные модели или вводить ограничения на другие параметры которые допустим не участвовали в кластеризации (но надо конечно следить за объёмом записей в кластерах--чтоб они были не очень маленькие желательно чтоб было больше 300-400 записей...но возможно некоторые сойдут и со 100-200 в виду их уникальности)
вот сам код (нашёл на просторах нета)

' k-Means Cluster Analysis
'---------------------------------------------------------------------------------------

Private Type Records
Dimension() As Double
Distance() As Double
Cluster As Integer
End Type

Dim Table As Range
Dim Record() As Records
Dim Centroid() As Records


Sub Run()
'Run k-Means
If Not kMeansSelection Then
Call MsgBox("Error: " & Err.Description, vbExclamation, "kMeans Error")
End If
End Sub

Function kMeansSelection() As Boolean
'Get user table selection
On Error Resume Next
Set Table = Application.InputBox(Prompt:= _
"Please select the range to analyse.", _
Title:="Specify Range", Type:=8)

If Table Is Nothing Then Exit Function 'Cancelled

'Check table dimensions
If Table.Rows.Count < 4 Or Table.Columns.Count < 2 Then
Err.Raise Number:=vbObjectError + 1000, Source:="k-Means Cluster Analysis", Description:="Table has insufficent rows or columns."
End If

'Get number of clusters
Dim numClusters As Integer
numClusters = Application.InputBox("Specify Number of Clusters", "k Means Cluster Analysis", Type:=1)

If Not numClusters > 0 Or numClusters = False Then
Exit Function 'Cancelled
End If
If Err.Number = 0 Then
If kMeans(Table, numClusters) Then
outputClusters
End If
End If

kMeansSelection_Error:
kMeansSelection = (Err.Number = 0)
End Function

Function kMeans(Table As Range, Clusters As Integer) As Boolean
'Table - Range of data to group. Records (Rows) are grouped according to attributes/dimensions(columns)
'Clusters - Number of clusters to reduce records into.

On Error Resume Next

'Script Performance Variables
Dim PassCounter As Integer

'Initialize Data Arrays
ReDim Record(2 To Table.Rows.Count)
Dim r As Integer 'record
Dim d As Integer 'dimension index
Dim d2 As Integer 'dimension index
Dim c As Integer 'centroid index
Dim c2 As Integer 'centroid index
Dim di As Integer 'distance

Dim x As Double 'Variable Distance Placeholder
Dim y As Double 'Variable Distance Placeholder

For r = LBound(Record) To UBound(Record)
'Initialize Dimension Value Arrays
ReDim Record®.Dimension(2 To Table.Columns.Count)
'Initialize Distance Arrays
ReDim Record®.Distance(1 To Clusters)
For d = LBound(Record®.Dimension) To UBound(Record®.Dimension)
Record®.Dimension(d) = Table.Rows®.Cells(d).Value
Next d
Next r

'Initialize Initial Centroid Arrays
ReDim Centroid(1 To Clusters)
Dim uniqueCentroid As Boolean

For c = LBound(Centroid) To UBound(Centroid)
'Initialize Centroid Dimension Depth
ReDim Centroid©.Dimension(2 To Table.Columns.Count)

'Initialize record index to next record
r = LBound(Record) + c - 2

Do ' Loop to ensure new centroid is unique
r = r + 1 'Increment record index throughout loop to find unique record to use as a centroid

'Assign record dimensions to centroid
For d = LBound(Centroid©.Dimension) To UBound(Centroid©.Dimension)
Centroid©.Dimension(d) = Record®.Dimension(d)
Next d

uniqueCentroid = True

For c2 = LBound(Centroid) To c - 1

'Loop Through Record Dimensions and check if all are the same
x = 0
y = 0
For d2 = LBound(Centroid©.Dimension) To _
UBound(Centroid©.Dimension)
x = x + Centroid©.Dimension(d2) ^ 2
y = y + Centroid(c2).Dimension(d2) ^ 2
Next d2

uniqueCentroid = Not Sqr(x) = Sqr(y)
If Not uniqueCentroid Then Exit For
Next c2

Loop Until uniqueCentroid

Next c

'Calculate Distances from Centroids

Dim lowestDistance As Double
Dim lastCluster As Integer
Dim ClustersStable As Boolean

Do 'While Clusters are not Stable

PassCounter = PassCounter + 1
ClustersStable = True 'Until Proved otherwise

'Loop Through Records
For r = LBound(Record) To UBound(Record)

lastCluster = Record®.Cluster
lowestDistance = 0 'Reset lowest distance

'Loop through record distances to centroids
For c = LBound(Centroid) To UBound(Centroid)

'======================================================
' Calculate Elucidean Distance
'======================================================
' d(p,q) = Sqr((q1 - p1)^2 + (q2 - p2)^2 + (q3 - p3)^2)
'------------------------------------------------------
' X = (q1 - p1)^2 + (q2 - p2)^2 + (q3 - p3)^2
' d(p,q) = X

x = 0
y = 0
'Loop Through Record Dimensions
For d = LBound(Record®.Dimension) To _
UBound(Record®.Dimension)
y = Record®.Dimension(d) - Centroid©.Dimension(d)
y = y ^ 2
x = x + y
Next d

x = Sqr(x) 'Get square root

'If distance to centroid is lowest (or first pass) assign record to centroid cluster.
If c = LBound(Centroid) Or x < lowestDistance Then
lowestDistance = x
'Assign distance to centroid to record
Record®.Distance© = lowestDistance
'Assign record to centroid
Record®.Cluster = c
End If
Next c

'Only change if true
If ClustersStable Then ClustersStable = Record®.Cluster = lastCluster

Next r

'Move Centroids to calculated cluster average
For c = LBound(Centroid) To UBound(Centroid) 'For every cluster

'Loop through cluster dimensions
For d = LBound(Centroid©.Dimension) To _
UBound(Centroid©.Dimension)

Centroid©.Cluster = 0 'Reset nunber of records in cluster
Centroid©.Dimension(d) = 0 'Reset centroid dimensions

'Loop Through Records
For r = LBound(Record) To UBound(Record)

'If Record is in Cluster then
If Record®.Cluster = c Then
'Use to calculate avg dimension for records in cluster

'Add to number of records in cluster
Centroid©.Cluster = Centroid©.Cluster + 1
'Add record dimension to cluster dimension for later division
Centroid©.Dimension(d) = Centroid©.Dimension(d) + _
Record®.Dimension(d)

End If

Next r

'Assign Average Dimension Distance
Centroid©.Dimension(d) = Centroid©.Dimension(d) / _
Centroid©.Cluster
Next d
Next c

Loop Until ClustersStable

kMeans = (Err.Number = 0)
End Function

Function outputClusters() As Boolean

Dim c As Integer 'Centroid Index
Dim r As Integer 'Row Index
Dim d As Integer 'Dimension Index

Dim oSheet As Worksheet
On Error Resume Next

Set oSheet = addWorksheet("Cluster Analysis", ActiveWorkbook)

'Loop Through Records
Dim rowNumber As Integer
rowNumber = 1

'Output Headings
With oSheet.Rows(rowNumber)
With .Cells(1)
.Value = "Row Title"
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
With .Cells(2)
.Value = "Centroid"
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
End With

'Print by Row
rowNumber = rowNumber + 1 'Blank Row
For r = LBound(Record) To UBound(Record)
oSheet.Rows(rowNumber).Cells(1).Value = Table.Rows®.Cells(1).Value
oSheet.Rows(rowNumber).Cells(2).Value = Record®.Cluster
rowNumber = rowNumber + 1
Next r

'Print Centroids - Headings
rowNumber = rowNumber + 1
For d = LBound(Centroid(LBound(Centroid)).Dimension) To UBound(Centroid(LBound(Centroid)).Dimension)
With oSheet.Rows(rowNumber).Cells(d)
.Value = Table.Rows(1).Cells(d).Value
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
Next d

'Print Centroids
rowNumber = rowNumber + 1
For c = LBound(Centroid) To UBound(Centroid)
With oSheet.Rows(rowNumber).Cells(1)
.Value = "Centroid " & c
.Font.Bold = True
End With
'Loop through cluster dimensions
For d = LBound(Centroid©.Dimension) To UBound(Centroid©.Dimension)
oSheet.Rows(rowNumber).Cells(d).Value = Centroid©.Dimension(d)
Next d
rowNumber = rowNumber + 1
Next c

oSheet.Columns.AutoFit '//AutoFit columns to contents

outputClusters_Error:
outputClusters = (Err.Number = 0)
End Function

Function addWorksheet(Name As String, Optional Workbook As Workbook) As Worksheet
On Error Resume Next
'// If a Workbook wasn't specified, use the active workbook
If Workbook Is Nothing Then Set Workbook = ActiveWorkbook

Dim Num As Integer
'// If a worksheet(s) exist with the same name, add/increment a number after the name
While WorksheetExists(Name, Workbook)
Num = Num + 1
If InStr(Name, " (") > 0 Then Name = Left(Name, InStr(Name, " ("))
Name = Name & " (" & Num & ")"
Wend

'//Add a sheet to the workbook
Set addWorksheet = Workbook.Worksheets.Add

'//Name the sheet
addWorksheet.Name = Name
End Function

Public Function WorksheetExists(WorkSheetName As String, Workbook As Workbook) As Boolean
On Error Resume Next
WorksheetExists = (Workbook.Sheets(WorkSheetName).Name <> "")
On Error GoTo 0
End Function

#38 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 04 June 2016 - 07:32

Теперь у некоторых(бамбуков) может возникнуть вопрос--а что дальше-то? Берём тупо данные пары (для примера это Г1 Г2) и тупо находим расстояния до всех центройдов (их в примере 36) и где оно минимальное к тому цетройду и относим (а центройду соответствует некий номер кластера) вот и всё...
Для примера приведу кусок кода (но не для центройдов из примера а из других...я другой прогой их находил по большему числу данных в примере выше всего 20000 было данных)

вот как-то так можно--через встроенную пользовательскую функцию екселя

Function CLASTG1G2_36(ByRef rah As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim VOZ As Range
Dim i, REZ As Long
Dim smas(1) As Single
For Each VOZ In rah.Cells
smas(i) = VOZ.Value
i = i + 1
Next VOZ

Arrast = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Dim Vxod(35, 1) As Double
Dim SRR As Double


Vxod(0, 0) = 1.4274
Vxod(1, 0) = 1.0934
Vxod(2, 0) = 1.4247
Vxod(3, 0) = 2.1741
Vxod(4, 0) = 2.8308
Vxod(5, 0) = 1.3542
Vxod(6, 0) = 0.7009
Vxod(7, 0) = 0.8444
Vxod(8, 0) = 1.7555
Vxod(9, 0) = 2.1137
Vxod(10, 0) = 2.4477
Vxod(11, 0) = 1.4136
Vxod(12, 0) = 1.7481
Vxod(13, 0) = 0.7401
Vxod(14, 0) = 2.6148
Vxod(15, 0) = 1.1481
Vxod(16, 0) = 1.0668
Vxod(17, 0) = 2.676
Vxod(18, 0) = 3.4578
Vxod(19, 0) = 1.77
Vxod(20, 0) = 4.4713
Vxod(21, 0) = 1.7486
Vxod(22, 0) = 2.1195
Vxod(23, 0) = 1.7294
Vxod(24, 0) = 1.2661
Vxod(25, 0) = 0.8534
Vxod(26, 0) = 1.2886
Vxod(27, 0) = 0.7999
Vxod(28, 0) = 0.671
Vxod(29, 0) = 2.087
Vxod(30, 0) = 0.8173
Vxod(31, 0) = 1.61595
Vxod(32, 0) = 1.10118
Vxod(33, 0) = 1.0401
Vxod(34, 0) = 2.2259
Vxod(35, 0) = 3.422

Vxod(0, 1) = 0.9598
Vxod(1, 1) = 1.4498
Vxod(2, 1) = 1.2298
Vxod(3, 1) = 1.0525
Vxod(4, 1) = 0.4222
Vxod(5, 1) = 2.2127
Vxod(6, 1) = 0.8088
Vxod(7, 1) = 2.7019
Vxod(8, 1) = 1.1315
Vxod(9, 1) = 2.3403
Vxod(10, 1) = 1.6433
Vxod(11, 1) = 0.7243
Vxod(12, 1) = 0.3485
Vxod(13, 1) = 1.7113
Vxod(14, 1) = 0.814
Vxod(15, 1) = 1.1415
Vxod(16, 1) = 0.6902
Vxod(17, 1) = 1.1718
Vxod(18, 1) = 1.4686
Vxod(19, 1) = 0.8443
Vxod(20, 1) = 0.7854
Vxod(21, 1) = 1.8102
Vxod(22, 1) = 0.7581
Vxod(23, 1) = 0.5888
Vxod(24, 1) = 1.7355
Vxod(25, 1) = 0.4623
Vxod(26, 1) = 0.44935
Vxod(27, 1) = 2.0855
Vxod(28, 1) = 1.3163
Vxod(29, 1) = 1.3572
Vxod(30, 1) = 1.0765
Vxod(31, 1) = 1.44936
Vxod(32, 1) = 0.9149
Vxod(33, 1) = 3.4977
Vxod(34, 1) = 0.4913
Vxod(35, 1) = 0.7352





For i = 0 To 35
SRR = 0
For j = 0 To 1
SRR = SRR + (Vxod(i, j) - smas(j)) ^ 2
Next j
Arrast(i) = SRR
Next i

REZ = WorksheetFunction.Match(WorksheetFunction.Min(Arrast), Arrast, 0) - 1

CLASTG1G2_36 = REZ
End Function


Тут нумерация кластеров идёт с 0 по 35 (это не принципиально...главное знать центройды)

Отредактировано Bambuk, 04 June 2016 - 07:37.


#39 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 06 June 2016 - 08:32

Centroid©--редактор тупит на форуме (сразу что-то не посмотрел код...можно подредактировать в VBA)
Centroid(с)

Отредактировано Bambuk, 06 June 2016 - 08:34.


#40 OFFLINE   Bragas

    Специалист


  • Участник II
  • ПипПипПип
  • 115 сообщения
5
  • МестоположениеСевастополь

Добавлено 28 December 2016 - 13:20

кто вчера смотрел теннис, я как всегда здесь в прямой трансляции