Skip to content

Commit 3e04ed3

Browse files
committed
Avoid deprecated ravel method and fix notebooks launch url
close #655
1 parent a8281c5 commit 3e04ed3

File tree

6 files changed

+32
-34
lines changed

6 files changed

+32
-34
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,5 @@ jsconfig.json
5454
/.quarto/
5555

5656
/.luarc.json
57+
58+
**/*.quarto_ipynb

_extensions/badges/badges.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function reminder_badges(args, kwargs)
8383

8484

8585
local onyxiaInitArgs = { section, chapterNoExtension }
86-
if correction then
86+
if (correction == "true") then
8787
table.insert(onyxiaInitArgs, "correction")
8888
end
8989

_quarto.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ project:
55
- 404.qmd
66
- content/getting-started/index.qmd
77
- content/getting-started/index.qmd
8-
- content/getting-started/03_revisions.qmd
98
- content/modelisation/index.qmd
109
- content/visualisation/index.qmd
1110
- content/annexes/corrections.qmd
11+
- content/modelisation/2_classification.qmd
1212

1313
profile:
1414
default: fr

content/modelisation/2_classification.qmd

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -191,23 +191,27 @@ import matplotlib.pyplot as plt
191191

192192
1. Créer une variable *dummy* appelée `y` dont la valeur vaut 1 quand les républicains l'emportent.
193193
2. En utilisant la fonction prête à l'emploi nommée `train_test_split` de la librairie `sklearn.model_selection`,
194-
créer des échantillons de test (20 % des observations) et d'estimation (80 %) avec comme *features* : `'Unemployment_rate_2019', 'Median_Household_Income_2021', 'Percent of adults with less than a high school diploma, 2018-22', "Percent of adults with a bachelor's degree or higher, 2018-22"` et comme *label* la variable `y`.
194+
créer des échantillons de test (20 % des observations) et d'estimation (80 %) avec comme *features* :
195195

196-
*Note: Il se peut que vous ayez le warning suivant :*
197-
198-
> A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel()
196+
```{.python}
197+
xvars = [
198+
"Unemployment_rate_2019", "Median_Household_Income_2021",
199+
"Percent of adults with less than a high school diploma, 2018-22",
200+
"Percent of adults with a bachelor's degree or higher, 2018-22"
201+
]
202+
```
199203

200-
*Note : Pour éviter ce warning à chaque fois que vous estimez votre modèle, vous pouvez utiliser `DataFrame[['y']].values.ravel()` plutôt que `DataFrame[['y']]` lorsque vous constituez vos échantillons.*
204+
et comme *label* la variable `y`.
201205

202206
3. Entraîner un classifieur SVM avec comme paramètre de régularisation `C = 1`. Regarder les mesures de performance suivante : `accuracy`, `f1`, `recall` et `precision`.
203207

204-
4. Vérifier la matrice de confusion : vous devriez voir que malgré des scores en apparence pas si mauvais, il y a un problème notable.
208+
2. Vérifier la matrice de confusion : vous devriez voir que malgré des scores en apparence pas si mauvais, il y a un problème notable.
205209

206-
5. Refaire les questions précédentes avec des variables normalisées. Le résultat est-il différent ?
210+
3. Refaire les questions précédentes avec des variables normalisées. Le résultat est-il différent ?
207211

208-
6. Changer de variables *x*. Utiliser uniquement le résultat passé du vote démocrate (année 2016) et le revenu. Les variables en question sont `share_2016_republican` et `Median_Household_Income_2021`. Regarder les résultats, notamment la matrice de confusion.
212+
4. Changer de variables *x*. Utiliser uniquement le résultat passé du vote démocrate (année 2016) et le revenu. Les variables en question sont `share_2016_republican` et `Median_Household_Income_2021`. Regarder les résultats, notamment la matrice de confusion.
209213

210-
7. [OPTIONNEL] Faire une 5-fold validation croisée pour déterminer le paramètre *C* idéal.
214+
5. [OPTIONNEL] Faire une 5-fold validation croisée pour déterminer le paramètre *C* idéal.
211215
::::
212216

213217
:::
@@ -222,33 +226,27 @@ créer des échantillons de test (20 % des observations) et d'estimation (80 %)
222226
2. Using the ready-to-use function `train_test_split` from the `sklearn.model_selection` library,
223227
create test samples (20% of the observations) and training samples (80%) with the following *features*:
224228

225-
```python
226-
vars = [
229+
```{.python}
230+
xvars = [
227231
"Unemployment_rate_2019", "Median_Household_Income_2021",
228232
"Percent of adults with less than a high school diploma, 2018-22",
229233
"Percent of adults with a bachelor's degree or higher, 2018-22"
230234
]
231235
```
232236

233237

234-
235238
and use the variable `y` as the *label*.
236239

237-
*Note: You may encounter the following warning:*
238-
239-
> A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel()
240-
241-
*Note: To avoid this warning every time you train your model, you can use `DataFrame[['y']].values.ravel()` instead of `DataFrame[['y']]` when preparing your samples.*
242-
243240
3. Train an SVM classifier with a regularization parameter `C = 1`. Examine the following performance metrics: `accuracy`, `f1`, `recall`, and `precision`.
244241

245242
4. Check the confusion matrix: despite seemingly reasonable scores, you should notice a significant issue.
246243

247244
5. Repeat the previous steps using normalized variables. Are the results different?
248245

249246

247+
6. Change the *x* variables. Use only the previous Democratic vote result (2016) and income. Variables in question are `share_2016_republican` and `Median_Household_Income_2021`. Examine results, in particular the confusion matrix.
248+
250249
7. [OPTIONAL] Perform 5-fold cross-validation to determine the ideal *C* parameter.
251-
6. Change the *x* variables. Use only the previous Democratic vote result (2016) and income. The variables in question are `share_2016_republican` and `Median_Household_Income_2021 `. Examine the results, particularly the confusion matrix.
252250

253251
:::
254252
::::
@@ -268,14 +266,12 @@ xvars = [
268266
"Percent of adults with a bachelor's degree or higher, 2018-22"
269267
]
270268
271-
272-
273269
df = votes.loc[:, ["y"] + xvars]
274270
df = df.dropna()
275271
276272
X_train, X_test, y_train, y_test = train_test_split(
277-
df[xvars],
278-
df[['y']].values.ravel(), test_size=0.2, random_state=123
273+
df.loc[: , xvars],
274+
df['y'], test_size=0.2, random_state=123
279275
)
280276
```
281277

@@ -361,13 +357,13 @@ Standardizing the variables ultimately does not bring any improvement:
361357
import sklearn.preprocessing as preprocessing
362358
363359
X = df.loc[:, xvars]
364-
y = df[['y']]
360+
y = df['y']
365361
scaler = preprocessing.StandardScaler().fit(X)
366362
X = scaler.transform(X)
367363
368364
X_train, X_test, y_train, y_test = train_test_split(
369365
X,
370-
y.values.ravel(), test_size=0.2, random_state=0
366+
y, test_size=0.2, random_state=0
371367
)
372368
373369
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
@@ -408,17 +404,17 @@ out = pd.DataFrame.from_dict(
408404
```{python}
409405
# Question 6
410406
votes['y'] = (votes['votes_gop'] > votes['votes_dem']).astype(int)
411-
df = votes[["y", "share_2016_republican", 'Median_Household_Income_2021']]
407+
df = votes.loc[: , ["y", "share_2016_republican", 'Median_Household_Income_2021']]
412408
tempdf = df.dropna(how = "any")
413409
414-
X = votes[['share_2016_republican', 'Median_Household_Income_2021']]
415-
y = tempdf[['y']]
410+
X = tempdf.loc[:, ['share_2016_republican', 'Median_Household_Income_2021']]
411+
y = tempdf['y']
416412
scaler = preprocessing.StandardScaler().fit(X)
417413
X = scaler.transform(X)
418414
419415
X_train, X_test, y_train, y_test = train_test_split(
420416
X,
421-
y.values.ravel(), test_size=0.2, random_state=0
417+
y, test_size=0.2, random_state=0
422418
)
423419
424420
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)

content/modelisation/6_pipeline.qmd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ mutations2 = mutations2.groupby('dep').sample(frac = 0.1, random_state = 123)
519519
520520
X_train, X_test, y_train, y_test = train_test_split(
521521
mutations2.drop("Valeur_fonciere", axis = 1),
522-
mutations2[["Valeur_fonciere"]].values.ravel(),
522+
mutations2["Valeur_fonciere"],
523523
test_size = 0.2, random_state = 123, stratify=mutations2[['dep']]
524524
)
525525
```
@@ -837,7 +837,7 @@ pipe = Pipeline(steps=[('preprocessor', transformer),
837837
838838
X_train, X_test, y_train, y_test = train_test_split(
839839
mutations_paris.drop("Valeur_fonciere", axis = 1),
840-
mutations_paris[["Valeur_fonciere"]].values.ravel(),
840+
mutations_paris["Valeur_fonciere"],
841841
test_size = 0.2, random_state = 123
842842
)
843843

content/modelisation/app/train.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def create_data_cv(data):
3737

3838
X_train, X_test, y_train, y_test = train_test_split(
3939
data.drop("Valeur_fonciere", axis=1),
40-
data[["Valeur_fonciere"]].values.ravel(),
40+
data["Valeur_fonciere"],
4141
test_size=0.2,
4242
random_state=123,
4343
)

0 commit comments

Comments
 (0)