# Examples¶

Compute a distance between two graphs.

<<<

```import copy
from mlstatpy.graph import GraphDistance

# We define two graphs as list of edges.
graph1 = [("a", "b"), ("b", "c"), ("b", "X"), ("X", "c"),
("c", "d"), ("d", "e"), ("0", "b")]
graph2 = [("a", "b"), ("b", "c"), ("b", "X"), ("X", "c"),
("c", "t"), ("t", "d"), ("d", "e"), ("d", "g")]

# We convert them into objects GraphDistance.
graph1 = GraphDistance(graph1)
graph2 = GraphDistance(graph2)

distance, graph = graph1.distance_matching_graphs_paths(graph2, use_min=False)

print("distance", distance)
print("common paths:", graph)
```

>>>

```    distance 0.3318250377073907
common paths: 0
X
a
b
c
d
e
00
11
g
t
a -> b []
b -> c []
b -> X []
X -> c []
c -> d []
d -> e []
0 -> b []
00 -> a []
00 -> 0 []
e -> 11 []
c -> 2a.t []
2a.t -> d []
d -> 2a.g []
2a.g -> 11 []
```

(entrée originale : graph_distance.py:docstring of mlstatpy.graph.graph_distance.GraphDistance, line 3)

Stochastic Gradient Descent applied to linear regression

The following example how to optimize a simple linear regression.

<<<

```import numpy
from mlstatpy.optim import SGDOptimizer

def fct_loss(c, X, y):
return numpy.linalg.norm(X @ c - y) ** 2

return x * (x @ c - y) * 0.1

coef = numpy.array([0.5, 0.6, -0.7])
X = numpy.random.randn(10, 3)
y = X @ coef

sgd = SGDOptimizer(numpy.random.randn(3))
sgd.train(X, y, fct_loss, fct_grad, max_iter=15, verbose=True)
print('optimized coefficients:', sgd.coef)
```

>>>

```    0/15: loss: 10.33 lr=0.1 max(coef): 1.5 l1=0/2.5 l2=0/2.7
1/15: loss: 5.543 lr=0.0302 max(coef): 1.2 l1=0.046/2.1 l2=0.001/2
2/15: loss: 2.077 lr=0.0218 max(coef): 0.98 l1=0.23/1.7 l2=0.028/1.4
3/15: loss: 0.8827 lr=0.018 max(coef): 0.89 l1=0.016/1.8 l2=9.5e-05/1.3
4/15: loss: 0.5161 lr=0.0156 max(coef): 0.86 l1=0.0022/1.8 l2=2.1e-06/1.2
5/15: loss: 0.3542 lr=0.014 max(coef): 0.83 l1=0.03/1.8 l2=0.00057/1.2
6/15: loss: 0.2752 lr=0.0128 max(coef): 0.82 l1=0.016/1.8 l2=0.00019/1.2
7/15: loss: 0.2085 lr=0.0119 max(coef): 0.81 l1=0.021/1.8 l2=0.00017/1.2
8/15: loss: 0.1621 lr=0.0111 max(coef): 0.8 l1=0.038/1.8 l2=0.00083/1.1
9/15: loss: 0.1277 lr=0.0105 max(coef): 0.78 l1=0.0077/1.8 l2=2.8e-05/1.1
10/15: loss: 0.1095 lr=0.00995 max(coef): 0.78 l1=0.018/1.8 l2=0.00012/1.1
11/15: loss: 0.1003 lr=0.00949 max(coef): 0.77 l1=0.0046/1.8 l2=8.1e-06/1.1
12/15: loss: 0.09159 lr=0.00909 max(coef): 0.77 l1=0.015/1.8 l2=0.00015/1.1
13/15: loss: 0.08345 lr=0.00874 max(coef): 0.77 l1=0.036/1.8 l2=0.00055/1.1
14/15: loss: 0.07681 lr=0.00842 max(coef): 0.76 l1=0.0039/1.8 l2=6e-06/1.1
15/15: loss: 0.0663 lr=0.00814 max(coef): 0.76 l1=0.0037/1.8 l2=5.1e-06/1.1
optimized coefficients: [ 0.425  0.603 -0.758]
```

(entrée originale : sgd.py:docstring of mlstatpy.optim.sgd.SGDOptimizer, line 34)