vault backup: 2026-05-14 19:26:50
This commit is contained in:
Vendored
+2
-2
@@ -259,6 +259,7 @@
|
|||||||
},
|
},
|
||||||
"active": "85ff070f2dda5843",
|
"active": "85ff070f2dda5843",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
|
"90 Library/11 Machine Learning/Персептрон.md",
|
||||||
"00 Inbox/МИАД_Л5_нейронки.pdf",
|
"00 Inbox/МИАД_Л5_нейронки.pdf",
|
||||||
"00 Inbox/КР - Кохонен.md",
|
"00 Inbox/КР - Кохонен.md",
|
||||||
"00 Inbox/КР - Персептрон.md",
|
"00 Inbox/КР - Персептрон.md",
|
||||||
@@ -304,7 +305,6 @@
|
|||||||
"00 Inbox/Archive",
|
"00 Inbox/Archive",
|
||||||
"90 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191",
|
"90 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191",
|
||||||
"90 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503",
|
"90 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503",
|
||||||
"90 Library/03 Math/Статистика/Кластерный анализ/Классификация.md.tmp.254945.1777751799750",
|
"90 Library/03 Math/Статистика/Кластерный анализ/Классификация.md.tmp.254945.1777751799750"
|
||||||
"90 Library/03 Math/Статистика/Кластерный анализ/Кластерный анализ.md.tmp.254945.1777751782184"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ tags:
|
|||||||
- statistics
|
- statistics
|
||||||
- cluster-analysis
|
- cluster-analysis
|
||||||
created: 2025-12-25
|
created: 2025-12-25
|
||||||
updated: 2026-05-07
|
updated: 2026-05-14
|
||||||
title: Расстояние Между Объектами
|
title: Расстояние Между Объектами
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -16,16 +16,17 @@ title: Расстояние Между Объектами
|
|||||||
1) Евклидово расстояние (Расстояние Минковского при $p=2$) (Теорема Пифагора)
|
1) Евклидово расстояние (Расстояние Минковского при $p=2$) (Теорема Пифагора)
|
||||||
$$d_{E}(O_{i},O_{j})=\sqrt{\sum\limits_{l=1}^{k}(x_{il}-x_{jl})^{2}}$$
|
$$d_{E}(O_{i},O_{j})=\sqrt{\sum\limits_{l=1}^{k}(x_{il}-x_{jl})^{2}}$$
|
||||||
2) Взвешенное Евклидово расстояние $$d_{BE}(O_{i},O_{j})=\sqrt{\sum\limits_{l=1}^{k} \omega_{l} (x_{il}-x_{jl})^{2}},$$ $\text{где}\ \omega_{l} \in (0,1) - \text{весовой коэффициент}$
|
2) Взвешенное Евклидово расстояние $$d_{BE}(O_{i},O_{j})=\sqrt{\sum\limits_{l=1}^{k} \omega_{l} (x_{il}-x_{jl})^{2}},$$ $\text{где}\ \omega_{l} \in (0,1) - \text{весовой коэффициент}$
|
||||||
3) Расстояние Минковского (общий случай для Евклидового и Хеммингово расстояние) $$d_{M}(O_{i},O_{j})=\sqrt[p]{\sum\limits_{l=1}^{k}|x_{il}-x_{jl}|^{p}}$$
|
3) Расстояние Минковского (общий случай для Евклидова и манхэттенского расстояний) $$d_{M}(O_{i},O_{j})=\sqrt[p]{\sum\limits_{l=1}^{k}|x_{il}-x_{jl}|^{p}}$$
|
||||||
4) Хеммингово (манхэттенское) расстояние (расстояние Минковского при $p=1$) $$d_{H}(O_{i},O_{j})={\sum\limits_{l=1}^{k}|x_{il}-x_{jl}|}$$
|
4) Манхэттенское расстояние (расстояние Минковского при $p=1$) $$d_{1}(O_{i},O_{j})={\sum\limits_{l=1}^{k}|x_{il}-x_{jl}|}$$
|
||||||
5) Расстояние Чебышева (расстояние Минковского при $p \to \infty$) $$d_{CH}(O_{i},O_{j})={\max_{1 \leq l \leq k}|x_{il}-x_{jl}|}$$
|
5) Расстояние Хэмминга для бинарных векторов - число несовпадающих позиций: $$d_{H}(O_{i},O_{j})=\sum\limits_{l=1}^{k}[x_{il}\neq x_{jl}]$$
|
||||||
6) Обобщенное расстояние Махаланобиса $$d_{O}(O_{i},O_{j})=\sqrt{(O_{i}-O_{j})^{T}\Delta^{T}\Sigma^{-1}\Delta(O_{i}-O_{j})}$$
|
6) Расстояние Чебышева (расстояние Минковского при $p \to \infty$) $$d_{CH}(O_{i},O_{j})={\max_{1 \leq l \leq k}|x_{il}-x_{jl}|}$$
|
||||||
|
7) Обобщенное расстояние Махаланобиса $$d_{O}(O_{i},O_{j})=\sqrt{(O_{i}-O_{j})^{T}\Delta^{T}\Sigma^{-1}\Delta(O_{i}-O_{j})}$$
|
||||||
|
|
||||||
> $\Sigma$ - ковариационная матрица генеральной совокупности, из которой извлечена выборка.
|
> $\Sigma$ - ковариационная матрица генеральной совокупности, из которой извлечена выборка.
|
||||||
>
|
>
|
||||||
> $\Delta$ - некоторая симметричная неотрицательно-определенная матрица весовых коэффициентов признаков.
|
> $\Delta$ - некоторая симметричная неотрицательно-определенная матрица весовых коэффициентов признаков.
|
||||||
|
|
||||||
7) Корреляционное расстояние
|
8) Корреляционное расстояние
|
||||||
$$d_{corr}(O_{i},O_{j}) = 1 - r_{ij}$$
|
$$d_{corr}(O_{i},O_{j}) = 1 - r_{ij}$$
|
||||||
|
|
||||||
> $r_{ij}$ - выборочный коэффициент корреляции между объектами $O_{i}, O_{j}$, соответствующие которым строки матрицы $X$ трактуются как *выборки*.
|
> $r_{ij}$ - выборочный коэффициент корреляции между объектами $O_{i}, O_{j}$, соответствующие которым строки матрицы $X$ трактуются как *выборки*.
|
||||||
@@ -40,4 +41,3 @@ title: Расстояние Между Объектами
|
|||||||
## Связанные заметки
|
## Связанные заметки
|
||||||
- [[Метрические алгоритмы]] — те же формулы (Евклид, Манхэттен, Минковский, Махаланобис) реализованы в sklearn; ML-нота даёт практическое применение
|
- [[Метрические алгоритмы]] — те же формулы (Евклид, Манхэттен, Минковский, Махаланобис) реализованы в sklearn; ML-нота даёт практическое применение
|
||||||
- [[Итерационная классификация. Метод K-средних (K-means)]] — использует $\min_{1 \leq l \leq k} \rho_{il}$ для отнесения объекта к кластеру
|
- [[Итерационная классификация. Метод K-средних (K-means)]] — использует $\min_{1 \leq l \leq k} \rho_{il}$ для отнесения объекта к кластеру
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ tags:
|
|||||||
- clustering
|
- clustering
|
||||||
- self-organizing-maps
|
- self-organizing-maps
|
||||||
created: 2026-05-07
|
created: 2026-05-07
|
||||||
updated: 2026-05-07
|
updated: 2026-05-14
|
||||||
title: Алгоритм обучения сети Кохонена
|
title: Алгоритм обучения сети Кохонена
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -82,6 +82,16 @@ $$
|
|||||||
|
|
||||||
Алгоритм похож на [[Итерационная классификация. Метод K-средних (K-means)|K-means]] тем, что объект влияет на ближайший прототип. Главное отличие SOM - наличие топологической карты: обновляется не только победитель, но и его соседи, поэтому карта сохраняет отношения близости между областями данных.
|
Алгоритм похож на [[Итерационная классификация. Метод K-средних (K-means)|K-means]] тем, что объект влияет на ближайший прототип. Главное отличие SOM - наличие топологической карты: обновляется не только победитель, но и его соседи, поэтому карта сохраняет отношения близости между областями данных.
|
||||||
|
|
||||||
|
## Метод выпуклой комбинации
|
||||||
|
|
||||||
|
Случайная инициализация весов может ухудшить качество карты. Плотные классы могут слиться, а близкие образы одного класса - раздробиться на дополнительные подклассы.
|
||||||
|
|
||||||
|
Один из способов смягчить эту проблему - метод выпуклой комбинации. Идея в том, что нормализованные входные образы сначала искусственно сближаются между собой, а затем постепенно возвращаются к исходному виду.
|
||||||
|
|
||||||
|
Для этого используют коэффициент $\alpha(t)$, который в процессе обучения изменяется от $0$ до $1$. В начале обучения сеть видит почти одинаковые образы и формирует грубую структуру карты. Затем входы всё сильнее приближаются к исходным данным, и карта уточняет разделение классов.
|
||||||
|
|
||||||
|
Этот приём снижает риск того, что начальные случайные веса слишком рано закрепят неудачное разбиение данных.
|
||||||
|
|
||||||
## Связанные заметки
|
## Связанные заметки
|
||||||
|
|
||||||
- [[Нейронная сеть Кохонена]]
|
- [[Нейронная сеть Кохонена]]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ tags:
|
|||||||
- clustering
|
- clustering
|
||||||
- self-organizing-maps
|
- self-organizing-maps
|
||||||
created: 2026-05-07
|
created: 2026-05-07
|
||||||
updated: 2026-05-07
|
updated: 2026-05-14
|
||||||
title: Нейронная сеть Кохонена
|
title: Нейронная сеть Кохонена
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -41,6 +41,8 @@ title: Нейронная сеть Кохонена
|
|||||||
|
|
||||||
Каждый нейрон выходного слоя связан со всеми входными признаками и имеет собственный вектор весов. Количество нейронов выходного слоя связано с желаемой детализацией карты и числом обнаруживаемых областей данных.
|
Каждый нейрон выходного слоя связан со всеми входными признаками и имеет собственный вектор весов. Количество нейронов выходного слоя связано с желаемой детализацией карты и числом обнаруживаемых областей данных.
|
||||||
|
|
||||||
|
Выходной слой можно рассматривать как упорядоченную структуру радиальных нейронов. В контексте классификации без учителя число нейронов или областей карты связано с ожидаемым числом классов $K$, но это не жёсткое число заранее известных меток: карта может показать более тонкую структуру данных.
|
||||||
|
|
||||||
![[Pasted image 20260507222244.png|500]]
|
![[Pasted image 20260507222244.png|500]]
|
||||||
|
|
||||||
## Обучение
|
## Обучение
|
||||||
@@ -60,6 +62,22 @@ title: Нейронная сеть Кохонена
|
|||||||
|
|
||||||
По смыслу сеть Кохонена близка к итерационным методам кластеризации: веса нейронов играют роль прототипов групп, а входные объекты притягивают ближайшие прототипы к себе. Поэтому рядом полезно держать заметки про [[Кластерный анализ]], [[Классификация]] и [[Итерационная классификация. Метод K-средних (K-means)]].
|
По смыслу сеть Кохонена близка к итерационным методам кластеризации: веса нейронов играют роль прототипов групп, а входные объекты притягивают ближайшие прототипы к себе. Поэтому рядом полезно держать заметки про [[Кластерный анализ]], [[Классификация]] и [[Итерационная классификация. Метод K-средних (K-means)]].
|
||||||
|
|
||||||
|
## Применение
|
||||||
|
|
||||||
|
Сети Кохонена особенно полезны для разведочного анализа данных: они помогают увидеть сгущения объектов, близость классов и потенциальные аномалии на двумерной карте.
|
||||||
|
|
||||||
|
Типичные применения:
|
||||||
|
|
||||||
|
- кластеризация без учителя;
|
||||||
|
- визуализация многомерных данных;
|
||||||
|
- поиск закономерностей в больших массивах данных;
|
||||||
|
- выявление независимых или слабо связанных признаков;
|
||||||
|
- сжатие информации;
|
||||||
|
- моделирование и прогнозирование;
|
||||||
|
- обнаружение новых явлений и нетипичных объектов.
|
||||||
|
|
||||||
|
Если после обучения кластеры разметить вручную, карту можно использовать и для классификации новых объектов. Если новый объект не похож ни на один из известных кластеров, это может быть сигналом новизны или аномалии.
|
||||||
|
|
||||||
## Связанные заметки
|
## Связанные заметки
|
||||||
|
|
||||||
- [[Нейронные сети]]
|
- [[Нейронные сети]]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ tags:
|
|||||||
- machine-learning
|
- machine-learning
|
||||||
- neural-networks
|
- neural-networks
|
||||||
created: 2025-12-17
|
created: 2025-12-17
|
||||||
updated: 2026-05-07
|
updated: 2026-05-14
|
||||||
title: Нейронные сети
|
title: Нейронные сети
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -208,16 +208,13 @@ $$
|
|||||||
|
|
||||||
## Персептрон
|
## Персептрон
|
||||||
|
|
||||||
**Персептрон**, или **перцептрон**, - математическая модель восприятия информации, предложенная Фрэнком Розенблаттом в 1957 году и реализованная в машине «Марк-1» в 1960 году.
|
Базовая однослойная модель классификации вынесена в отдельную заметку [[Персептрон]]. Она показывает, как нейронная сеть может разделять пространство признаков гиперплоскостью и почему линейная разделимость является важным ограничением простых моделей.
|
||||||
|
|
||||||
Персептрон - один слой искусственных нейронов. Он решает задачу линейной разделимости: разделяет пространство признаков гиперплоскостью.
|
|
||||||
|
|
||||||
По смыслу это близко к [[Линейные модели|линейным моделям]], потому что решение строится через линейную комбинацию входных признаков и весов.
|
|
||||||
|
|
||||||
## Связанные заметки
|
## Связанные заметки
|
||||||
|
|
||||||
- [[Обратное распространение ошибки]]
|
- [[Обратное распространение ошибки]]
|
||||||
- [[Backpropagation для многослойной нейронной сети]]
|
- [[Backpropagation для многослойной нейронной сети]]
|
||||||
|
- [[Персептрон]]
|
||||||
- [[Сеть Хопфилда]]
|
- [[Сеть Хопфилда]]
|
||||||
- [[Сеть Хэмминга]]
|
- [[Сеть Хэмминга]]
|
||||||
- [[Линейные модели]]
|
- [[Линейные модели]]
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
status: seed
|
||||||
|
type: concept
|
||||||
|
tags:
|
||||||
|
- machine-learning
|
||||||
|
- neural-networks
|
||||||
|
- linear-models
|
||||||
|
- classification
|
||||||
|
created: 2026-05-14
|
||||||
|
updated: 2026-05-14
|
||||||
|
title: Персептрон
|
||||||
|
---
|
||||||
|
|
||||||
|
# Персептрон
|
||||||
|
|
||||||
|
**Персептрон**, или **перцептрон**, - ранняя модель [[Нейронные сети|нейронной сети]], предложенная Фрэнком Розенблаттом в 1957 году и реализованная в машине «Марк-1» в 1960 году. По смыслу это однослойная модель классификации, которая принимает вектор признаков и относит объект к классу по линейному правилу.
|
||||||
|
|
||||||
|
Персептрон близок к [[Линейные модели|линейным моделям]]: решение строится через взвешенную сумму входных признаков и пороговую функцию активации.
|
||||||
|
|
||||||
|
## Идея
|
||||||
|
|
||||||
|
Персептрон состоит из одного слоя искусственных нейронов, соединённых с входами через весовые коэффициенты. На вход подаётся вектор признаков:
|
||||||
|
|
||||||
|
$$
|
||||||
|
X=(x_1,x_2,\dots,x_n)
|
||||||
|
$$
|
||||||
|
|
||||||
|
Каждый нейрон вычисляет линейную комбинацию входов:
|
||||||
|
|
||||||
|
$$
|
||||||
|
S_k=\sum\limits_{i=1}^{n}x_iw_{ik}
|
||||||
|
$$
|
||||||
|
|
||||||
|
и сравнивает её с порогом:
|
||||||
|
|
||||||
|
$$
|
||||||
|
S_k=T_k,\quad k=1,\dots,m
|
||||||
|
$$
|
||||||
|
|
||||||
|
где:
|
||||||
|
|
||||||
|
- $x_i$ - значение входного признака;
|
||||||
|
- $w_{ik}$ - вес связи между входом $i$ и выходом $k$;
|
||||||
|
- $T_k$ - порог для выходного нейрона;
|
||||||
|
- $m$ - число выходов сети.
|
||||||
|
|
||||||
|
## Геометрический смысл
|
||||||
|
|
||||||
|
С математической точки зрения персептрон разбивает пространство признаков гиперплоскостями. В трёхмерном случае плоскость задаётся уравнением:
|
||||||
|
|
||||||
|
$$
|
||||||
|
A X + B Y + C Z + D = 0
|
||||||
|
$$
|
||||||
|
|
||||||
|
Точки по одну сторону плоскости удовлетворяют неравенству:
|
||||||
|
|
||||||
|
$$
|
||||||
|
A X + B Y + C Z + D > 0
|
||||||
|
$$
|
||||||
|
|
||||||
|
Веса персептрона задают положение такой плоскости в пространстве признаков. Поэтому классификация сводится к проверке, по какую сторону разделяющей гиперплоскости находится объект.
|
||||||
|
|
||||||
|
Для сети персептронного типа с $m$ выходами число областей классификации не превышает:
|
||||||
|
|
||||||
|
$$
|
||||||
|
2^m
|
||||||
|
$$
|
||||||
|
|
||||||
|
## Ограничение
|
||||||
|
|
||||||
|
Однослойный персептрон решает задачи, которые можно свести к линейной разделимости. Если классы нельзя разделить одной гиперплоскостью или набором линейных порогов в исходном пространстве признаков, нужен переход к другим признакам или многослойной сети.
|
||||||
|
|
||||||
|
Поэтому персептрон полезен как базовая модель для понимания [[Нейронные сети|нейронных сетей]], но не заменяет многослойные архитектуры и [[Обратное распространение ошибки|обратное распространение ошибки]].
|
||||||
|
|
||||||
|
## Связанные заметки
|
||||||
|
|
||||||
|
- [[Нейронные сети]]
|
||||||
|
- [[Линейные модели]]
|
||||||
|
- [[Классификация]]
|
||||||
|
- [[Обратное распространение ошибки]]
|
||||||
@@ -22,6 +22,26 @@ title: Сеть Хопфилда
|
|||||||
|
|
||||||
По смыслу входной образ работает как ключ: сеть "вспоминает" наиболее близкий сохранённый образ.
|
По смыслу входной образ работает как ключ: сеть "вспоминает" наиболее близкий сохранённый образ.
|
||||||
|
|
||||||
|
В общем случае входной сигнал описывается биполярным вектором:
|
||||||
|
|
||||||
|
$$
|
||||||
|
X=(x_1,\dots,x_n),\quad x_i \in \{-1,1\}
|
||||||
|
$$
|
||||||
|
|
||||||
|
Эталонный образ $k$ можно обозначить как:
|
||||||
|
|
||||||
|
$$
|
||||||
|
X^k=(x_1^k,\dots,x_n^k),\quad k=1,\dots,m
|
||||||
|
$$
|
||||||
|
|
||||||
|
Если сеть успешно распознаёт образ, её выход совпадает с одним из эталонов:
|
||||||
|
|
||||||
|
$$
|
||||||
|
Y=X^k
|
||||||
|
$$
|
||||||
|
|
||||||
|
Если выходной вектор не совпал ни с одним эталоном, сеть пришла к ложному или неинтерпретируемому состоянию.
|
||||||
|
|
||||||
## Архитектура
|
## Архитектура
|
||||||
|
|
||||||
Основные свойства сети Хопфилда:
|
Основные свойства сети Хопфилда:
|
||||||
@@ -36,6 +56,22 @@ title: Сеть Хопфилда
|
|||||||
|
|
||||||
Для сети Хопфилда часто используется бинарная функция активации, описанная в [[Нейронные сети]].
|
Для сети Хопфилда часто используется бинарная функция активации, описанная в [[Нейронные сети]].
|
||||||
|
|
||||||
|
## Инициализация весов
|
||||||
|
|
||||||
|
Веса задаются по эталонным образам один раз перед началом работы сети:
|
||||||
|
|
||||||
|
$$
|
||||||
|
w_{ij}=\sum\limits_{k=1}^{m}x_i^k x_j^k,\quad i\neq j
|
||||||
|
$$
|
||||||
|
|
||||||
|
Обычно связь нейрона с самим собой исключают:
|
||||||
|
|
||||||
|
$$
|
||||||
|
w_{ii}=0
|
||||||
|
$$
|
||||||
|
|
||||||
|
После такой инициализации сеть не дообучается на входных примерах, а использует уже записанные в матрицу связей эталоны.
|
||||||
|
|
||||||
## Алгоритм функционирования
|
## Алгоритм функционирования
|
||||||
|
|
||||||
1. На вход подаётся неизвестный сигнал. Фактически ввод выполняется установкой начальных значений аксонов:
|
1. На вход подаётся неизвестный сигнал. Фактически ввод выполняется установкой начальных значений аксонов:
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ title: Сеть Хэмминга
|
|||||||
|
|
||||||
Сеть должна выбрать эталон с минимальным расстоянием до входного сигнала. В результате активным остаётся один выходной нейрон, соответствующий выбранному образу.
|
Сеть должна выбрать эталон с минимальным расстоянием до входного сигнала. В результате активным остаётся один выходной нейрон, соответствующий выбранному образу.
|
||||||
|
|
||||||
|
В отличие от [[Сеть Хопфилда|сети Хопфилда]], сеть Хэмминга не пытается восстановить полный эталонный образ. Её цель - выбрать номер или класс ближайшего образца.
|
||||||
|
|
||||||
![[Pasted image 20260514120654.png]]
|
![[Pasted image 20260514120654.png]]
|
||||||
|
|
||||||
## Архитектура
|
## Архитектура
|
||||||
@@ -48,6 +50,8 @@ $$
|
|||||||
|
|
||||||
Ингибиторные связи постепенно подавляют менее подходящие эталоны, пока активным не останется один победивший нейрон.
|
Ингибиторные связи постепенно подавляют менее подходящие эталоны, пока активным не останется один победивший нейрон.
|
||||||
|
|
||||||
|
Первый слой нужен для начального сравнения входа со всеми эталонами. Второй слой превращает эти оценки близости в результат классификации: за счёт взаимного торможения слабые кандидаты подавляются, а сильнейший остаётся активным.
|
||||||
|
|
||||||
## Алгоритм функционирования
|
## Алгоритм функционирования
|
||||||
|
|
||||||
На стадии инициализации весовым коэффициентам первого слоя и порогам функции активации присваиваются значения:
|
На стадии инициализации весовым коэффициентам первого слоя и порогам функции активации присваиваются значения:
|
||||||
@@ -102,6 +106,8 @@ $$
|
|||||||
|
|
||||||
Роль первого слоя условна: после вычисления начальных значений сеть больше к нему не обращается. Поэтому первый слой можно заменить матрицей весовых коэффициентов.
|
Роль первого слоя условна: после вычисления начальных значений сеть больше к нему не обращается. Поэтому первый слой можно заменить матрицей весовых коэффициентов.
|
||||||
|
|
||||||
|
Это подчёркивает практический смысл сети Хэмминга: первая часть вычисляет расстояния или меры похожести, а вторая выбирает победителя.
|
||||||
|
|
||||||
## Связанные заметки
|
## Связанные заметки
|
||||||
|
|
||||||
- [[Сеть Хопфилда]]
|
- [[Сеть Хопфилда]]
|
||||||
|
|||||||
Reference in New Issue
Block a user