Логистична регресия
• Контролиран машинен алгоритъм, който предвижда вероятността за възникване на двоично събитие
• Например определяне дали има вероятност дадено лице да има диабет; ще има два възможни изхода, „да“, те имат диабет, или „не“, те нямат диабет
• Този метод е известен като двоична класификация
По какво се различава логистичната регресия от линейната регресия?
• При линейната регресия целевият резултат е числена непрекъсната стойност, докато при логистичната регресия целевият резултат е числено дискретен и ограничен до конкретни стойности
Видове логистична регресия
• Двоична — има два възможни числени дискретни резултата
• Многочленна — има множество числени дискретни резултати
• Поредна — има множество числени дискретни резултати, подредени в категории (редни)
Справка: https://www.capitalone.com/tech/machine-learning/what-is-logistic-regression/
Сега ще разгледаме набора от данни на mtcars и ще предвидим дали колата е автоматична или ръчна, използвайки логистична регресия.
Намерете повече информация за mtcars тук: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/mtcars
%time import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import sklearn # Import CSV mtcars df = pd.read_csv('https://gist.githubusercontent.com/ZeccaLehn/4e06d2575eb9589dbe8c365d61cb056c/raw/64f1660f38ef523b2a1a13be77b002b98665cdfe/mtcars.csv') # Edit element of column header df.rename(columns={'Unnamed: 0':'brand'}, inplace=True) df.head()
df.describe()
# Split into features (X) and target (y) subsets X = df[['mpg', 'cyl', 'disp', 'hp', 'drat', 'wt', 'qsec', 'vs', 'gear', 'carb']] y = df[['am']] # Split into test/train sets from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # Print subset dimensions X_train.shape, y_train.shape, X_test.shape, y_test.shape
# Normalise train/test sets from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.fit(X_test) # Define regression model from sklearn import linear_model lm = linear_model.LogisticRegression() # Build training model model = lm.fit(X_train_scaled, y_train) # Print model coefficients and intercept value print(model.coef_) print(model.intercept_)
# Apply trained model to make prediction (on test set) y_pred = model.predict(X_test) y_pred
# Print accuracy score from sklearn.metrics import accuracy_score test_acc = accuracy_score(y_test, y_pred) print("The accuracy for test set is {}".format(test_acc*100), "%")
# Print classification report from sklearn.metrics import classification_report print(classification_report(y_test,y_pred))
# Print confusion matrix from sklearn.metrics import confusion_matrix print(confusion_matrix(y_test,y_pred))
# Visualise feature importance importances = pd.DataFrame(data={ 'Attribute': X_train.columns, 'Importance': model.coef_[0] }) importances = importances.sort_values(by='Importance', ascending=False) plt.bar(x=importances['Attribute'], height=importances['Importance'], color='#087E8B') plt.title('Feature importances obtained from coefficients', size=20) plt.xticks(rotation='vertical') plt.show()