Documente Academic
Documente Profesional
Documente Cultură
Exemplu instalare pachet scikit-learn: în (Windows) Command prompt / (UNIX) fereastră Terminal / shell se
rulează:
pip install scikit-learn
Similar și pentru alte pachete Python: scipy, six, cycler, pyparsing, kiwisolver, python-dateutil, matplotlib, pytz,
pandas, seaborn, numpy, sklearn, statsmodels etc.
După caz, poate fi necesar upgrade-ul PIP (Python package installer) - v. mai multe detalii pe
https://datatofish.com/upgrade-pip/ (https://datatofish.com/upgrade-pip/)
In [ ]:
try:
import sklearn
print('Import OK.')
print(err)
In [ ]:
import numpy as np
X = np.array([[5,3],
[10,15],
[15,12],
[24,10],
[30,45],
[85,70],
[71,80],
[60,78],
[55,52],
[80,91]])
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
print(kmeans.cluster_centers_)
print(kmeans.labels_)
f1 = plt.figure()
f2 = plt.figure()
f3 = plt.figure()
plt.show()
Această metodă este utilizată în învățarea automată (machine learning) pentru a identifica clusterele pe baza
unui set de antrenare (train); pe această bază se vor face predicții privind apartenența altor observații (din
setul de test) la clusterele identificate (v. mai multe detalii aici
(https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa1))
Aplicație
Scufundarea Titanicului în 1912 a dus la 1502 victime din cei 2224 pasageri și membri ai echipajului.
Se vor
utiliza două seturi de date train.csv și test.csv , ce conțin informații legate de pasageri. Diferența
majoră dintre cele două seturi la nivel de coloane constă în coloana Survived , prezentă doar în setul de
antrenare. Se poate considera că supraviețuirea a fost influențată de anumite atribute, cum ar fi vârsta,
sexul, clasa biletului de călătorie etc. Pornind de la aceste caracteristici, se vor grupa (clusteriza) pasagerii
din setul de date de antrenare în două clustere (supraviețuitori / nesupraviețuitori); pe baza acestora se vor
face predicții privind apartenența pasagerilor din setul de test la unul dintre clustere.
In [ ]:
import pandas as pd
import numpy as np
In [ ]:
pd.options.display.max_columns = 12
test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')
print('*****test*****')
print(test.head())
print('*****train*****')
print(train.head())
In [ ]:
print('*****test_stats*****')
print(test.describe())
print('*****train_stats*****')
print(train.describe())
Anumiți algoritmi machine learning, inclusiv k-means, nu permit valori lipsă. Astfel, vor fi identificate valorile
lipsă.
In [ ]:
#Exemplu 2. Pas 4. Vizualizare denumire coloane din setul train și indentificare valori
lipsă
print(train.columns.values)
print(train.isna())
print('*****test_valori_lipsă*****')
print(test.isna())
In [ ]:
#Exemplu 2. Pas 5. Calcul număr valori lipsă pentru coloanele celor două seturi de date
print(train.isna().sum())
print("\n")
print(test.isna().sum())
In [ ]:
train.fillna(train.mean(), inplace=True)
test.fillna(test.mean(), inplace=True)
print(train.isna().sum())
print(test.isna().sum())
In [ ]:
In [ ]:
g = sns.FacetGrid(train, col='Survived')
g.map(plt.hist, 'Age')
grid.map(plt.hist, 'Age')
grid.add_legend()
plt.show()
In [ ]:
train.info()
In [ ]:
In [ ]:
labelEncoder = LabelEncoder()
labelEncoder.fit(train['Sex'])
labelEncoder.fit(test['Sex'])
train['Sex'] = labelEncoder.transform(train['Sex'])
test['Sex'] = labelEncoder.transform(test['Sex'])
train.info()
test.info()
In [ ]:
#Exemplu 2. Pas 12. Var. X este un vector (array din pachetul numpy) identic cu setul t
rain,
# din care a fost ștearsă coloana Survived, iar y este un vector format din coloana Sur
vived
X = np.array(train.drop(['Survived'], 1).astype(float))
y = np.array(train['Survived'])
In [ ]:
# (supraviețuitori/nesupraviețuitori).
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
In [ ]:
correct = 0
for i in range(len(X)):
predict_me = np.array(X[i].astype(float))
prediction = kmeans.predict(predict_me)
if prediction[0] == y[i]:
correct += 1
print(correct/len(X))
import pandas as pd
import numpy as np
pd.options.display.max_columns = 12
test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')
print('*****test*****')
print(test.head())
print('*****train*****')
print(train.head())
print('*****test_stats*****')
print(test.describe())
print('*****train_stats*****')
print(train.describe())
print(train.columns.values)
print(train.isna())
print(test.isna())
print(train.isna().sum())
print("\n")
print(test.isna().sum())
train.fillna(train.mean(), inplace=True)
test.fillna(test.mean(), inplace=True)
print(train.isna().sum())
print(test.isna().sum())
g = sns.FacetGrid(train, col='Survived')
g.map(plt.hist, 'Age')
grid.map(plt.hist, 'Age')
grid.add_legend()
plt.show()
train.info()
labelEncoder = LabelEncoder()
labelEncoder.fit(train['Sex'])
labelEncoder.fit(test['Sex'])
train['Sex'] = labelEncoder.transform(train['Sex'])
test['Sex'] = labelEncoder.transform(test['Sex'])
train.info()
test.info()
X = np.array(train.drop(['Survived'], 1).astype(float))
y = np.array(train['Survived'])
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=2)
kmeans.fit(X_scaled)
correct = 0
for i in range(len(X)):
predict_me = np.array(X[i].astype(float))
prediction = kmeans.predict(predict_me)
if prediction[0] == y[i]:
correct += 1
print(correct/len(X))
Regresie logistică
Această metodă de machine learning este utilizată pentru probleme de clasificare - predicția apartenenței
sau nu a unei observații la o clasă (regresie logistică binară) - de ex. pasager supraviețuitor sau nu.
Se urmărește determinarea unei ecuații de regresie bazată pe funcția sigmoidă (funcția logistică), în loc de o
dreaptă ca la regresia liniară (v. mai multe detalii aici (https://towardsdatascience.com/introduction-to-logistic-
regression-66248243c148)).
Ecuația de regresie este estimată pe baza datelor din setul de antrenare (train). Apoi se vor face predicții
asupra setului de test.
In [ ]:
import pandas as pd
pd.options.display.max_columns = 12
test = pd.read_csv('test1.csv')
train = pd.read_csv('train.csv')
print('*****test*****')
print(test[:4])
print('*****train*****')
print(train[:4])
train.fillna(train.mean(), inplace=True)
test.fillna(test.mean(), inplace=True)
print(train.isna().sum())
print(test.isna().sum())
X_train = train[predictors].values
X_test = test[predictors].values
y_train = train['Survived'].values
y_test= test['Survived'].values
print(X_train[:5])
print(y_train[:5])
verbose=0, warm_start=False)
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
print(y_predict)
print((y_test == y_predict).mean())
import pandas as pd
import statsmodels.api as sm
pd.options.display.max_columns = 12
test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')
train.fillna(train.mean(), inplace=True)
test.fillna(test.mean(), inplace=True)
X_train = train['IsFemale'].values
X_train = sm.add_constant(X_train)
y_train = train['Survived'].values
results = model.fit()
print(results.params)
print(results.summary())
import pandas as pd
pd.options.display.max_columns = 12
test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')
train.fillna(train.mean(), inplace=True)
test.fillna(test.mean(), inplace=True)
y = train['Survived']
print(results.params)
print(round(results.predict(train[:5])))
Referințe
1. J. VanderPlas, Python Data Science Handbook:
https://jakevdp.github.io/PythonDataScienceHandbook/index.html
(https://jakevdp.github.io/PythonDataScienceHandbook/index.html), Cap. 5
2. https://stackabuse.com/k-means-clustering-with-scikit-learn/ (https://stackabuse.com/k-means-
clustering-with-scikit-learn/)
3. https://www.datacamp.com/community/tutorials/k-means-clustering-python
(https://www.datacamp.com/community/tutorials/k-means-clustering-python)
4. Wes McKinney, 2nd Edition of Python for Data Analysis DATA WRANGLING WITH PANDAS, NUMPY,
AND IPYTHON, O’Reilley
5. https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc
(https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc)
6. https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.html
(https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.html