Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
tutorial-clustering-tutorial
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Operate
Environments
Monitor
Service Desk
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
nomad-lab
ai-toolkit
tutorial-clustering-tutorial
Commits
0a994a46
Commit
0a994a46
authored
4 years ago
by
Luigi Sbailo
Browse files
Options
Downloads
Patches
Plain Diff
Generate dataset
parents
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
clustering_tutorial.ipynb
+144
-0
144 additions, 0 deletions
clustering_tutorial.ipynb
with
144 additions
and
0 deletions
clustering_tutorial.ipynb
0 → 100644
+
144
−
0
View file @
0a994a46
{
"cells": [
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-16T14:52:37.517420Z",
"start_time": "2020-11-16T14:52:37.514612Z"
}
},
"outputs": [],
"source": [
"from sklearn.datasets import make_blobs\n",
"import numpy as np\n",
"import math\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 422,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-16T17:00:36.258812Z",
"start_time": "2020-11-16T17:00:36.230787Z"
}
},
"outputs": [],
"source": [
"n_samples = 500\n",
"random_state = 0\n",
"X, y = make_blobs(n_samples=n_samples,\n",
" random_state=random_state, \n",
" centers=[[0, 0],\n",
" [0,0],\n",
" [0,0],\n",
" [0,0]\n",
" ])\n",
"\n",
"blob = 0\n",
"transformation = [[1,0],[0,5]]\n",
"X=np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X[:,0]=np.where (y==blob, X[:,0]+X[:,1]**2/20, X[:,0])\n",
"theta = 0.15 * math.pi \n",
"transformation = [[np.cos(theta),-np.sin(theta)],[np.sin(theta),np.cos(theta)]]\n",
"X=np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"\n",
"blob = 1\n",
"transformation = [[1,0],[0,3]]\n",
"X=np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X[:,0]=np.where (y==blob, X[:,0]+X[:,1]**2/10, X[:,0])\n",
"theta = 0.95 * math.pi \n",
"transformation = [[np.cos(theta),-np.sin(theta)],[np.sin(theta),np.cos(theta)]]\n",
"X = np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X = np.where (y==blob, np.add(X,np.concatenate([13*np.ones([len(X),1]),10*np.ones([len(X),1])],axis=1)).T,X.T).T\n",
"\n",
"\n",
"blob = 2\n",
"transformation = [[1,0],[0,3]]\n",
"X=np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X[:,0]=np.where (y==blob, X[:,0]+X[:,1]**2/10, X[:,0])\n",
"theta = 0.15 * math.pi \n",
"transformation = [[np.cos(theta),-np.sin(theta)],[np.sin(theta),np.cos(theta)]]\n",
"X = np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X = np.where (y==blob, np.add(X,np.concatenate([-3*np.ones([len(X),1]),25*np.ones([len(X),1])],axis=1)).T,X.T).T\n",
"\n",
"blob = 3\n",
"transformation = [[0.2,0],[0,10]]\n",
"X=np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"theta = 0.05 * math.pi \n",
"transformation = [[np.cos(theta),-np.sin(theta)],[np.sin(theta),np.cos(theta)]]\n",
"X = np.where (y==blob, np.dot(transformation,X.T), X.T).T\n",
"X = np.where (y==blob, np.add(X,np.concatenate([-6*np.ones([len(X),1]),-1*np.ones([len(X),1])],axis=1)).T,X.T).T\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 423,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-16T17:00:36.602565Z",
"start_time": "2020-11-16T17:00:36.485999Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fa8ddcf7cd0>"
]
},
"execution_count": 423,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[:,0],X[:,1],c=y)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:code id: tags:
```
python
from
sklearn.datasets
import
make_blobs
import
numpy
as
np
import
math
import
matplotlib.pyplot
as
plt
```
%% Cell type:code id: tags:
```
python
n_samples
=
500
random_state
=
0
X
,
y
=
make_blobs
(
n_samples
=
n_samples
,
random_state
=
random_state
,
centers
=
[[
0
,
0
],
[
0
,
0
],
[
0
,
0
],
[
0
,
0
]
])
blob
=
0
transformation
=
[[
1
,
0
],[
0
,
5
]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
[:,
0
]
=
np
.
where
(
y
==
blob
,
X
[:,
0
]
+
X
[:,
1
]
**
2
/
20
,
X
[:,
0
])
theta
=
0.15
*
math
.
pi
transformation
=
[[
np
.
cos
(
theta
),
-
np
.
sin
(
theta
)],[
np
.
sin
(
theta
),
np
.
cos
(
theta
)]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
blob
=
1
transformation
=
[[
1
,
0
],[
0
,
3
]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
[:,
0
]
=
np
.
where
(
y
==
blob
,
X
[:,
0
]
+
X
[:,
1
]
**
2
/
10
,
X
[:,
0
])
theta
=
0.95
*
math
.
pi
transformation
=
[[
np
.
cos
(
theta
),
-
np
.
sin
(
theta
)],[
np
.
sin
(
theta
),
np
.
cos
(
theta
)]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
=
np
.
where
(
y
==
blob
,
np
.
add
(
X
,
np
.
concatenate
([
13
*
np
.
ones
([
len
(
X
),
1
]),
10
*
np
.
ones
([
len
(
X
),
1
])],
axis
=
1
)).
T
,
X
.
T
).
T
blob
=
2
transformation
=
[[
1
,
0
],[
0
,
3
]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
[:,
0
]
=
np
.
where
(
y
==
blob
,
X
[:,
0
]
+
X
[:,
1
]
**
2
/
10
,
X
[:,
0
])
theta
=
0.15
*
math
.
pi
transformation
=
[[
np
.
cos
(
theta
),
-
np
.
sin
(
theta
)],[
np
.
sin
(
theta
),
np
.
cos
(
theta
)]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
=
np
.
where
(
y
==
blob
,
np
.
add
(
X
,
np
.
concatenate
([
-
3
*
np
.
ones
([
len
(
X
),
1
]),
25
*
np
.
ones
([
len
(
X
),
1
])],
axis
=
1
)).
T
,
X
.
T
).
T
blob
=
3
transformation
=
[[
0.2
,
0
],[
0
,
10
]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
theta
=
0.05
*
math
.
pi
transformation
=
[[
np
.
cos
(
theta
),
-
np
.
sin
(
theta
)],[
np
.
sin
(
theta
),
np
.
cos
(
theta
)]]
X
=
np
.
where
(
y
==
blob
,
np
.
dot
(
transformation
,
X
.
T
),
X
.
T
).
T
X
=
np
.
where
(
y
==
blob
,
np
.
add
(
X
,
np
.
concatenate
([
-
6
*
np
.
ones
([
len
(
X
),
1
]),
-
1
*
np
.
ones
([
len
(
X
),
1
])],
axis
=
1
)).
T
,
X
.
T
).
T
```
%% Cell type:code id: tags:
```
python
plt
.
scatter
(
X
[:,
0
],
X
[:,
1
],
c
=
y
)
```
%% Output
<matplotlib.collections.PathCollection at 0x7fa8ddcf7cd0>
%% Cell type:code id: tags:
```
python
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment