### 機器學習簡易入門（四）

`import pandasadmissions = pandas.read_csv('admissions.csv')`

`from sklearn.linear_model import LinearRegressionmodel = LinearRegression()#訓練模型model.fit(admissions[['gre', 'gpa']], admissions["admit"])admit_prediction = model.predict(admissions[['gre', 'gpa']])plt.xlabel('gpa')plt.ylabel('admit_prediction')plt.scatter(admissions["gpa"], admit_prediction)plt.show()`

logistic回歸函數

logistic回歸產生的輸出都位於0和1之間，通常用來產生預測某個事件的發生概率，該函數的格式為，其中的e是一個無理數常量，該函數有一個很漂亮的形狀

`# logistic回歸函數def logit(x):return np.exp(x) / (1 + np.exp(x)) # 在-6到6之間等差產生50個數t = np.linspace(-6,6,50, dtype=float)ylogit = logit(t)#作圖plt.plot(t, ylogit, label="logistic")plt.ylabel("Probability")plt.xlabel("t")plt.title("Logistic Function")plt.show()`

logistic回歸

`from sklearn.linear_model import LogisticRegression#對數據集進行隨機重排序admissions = admissions.loc[np.random.permutation(admissions.index)]# 將隨機排序后的前700條數據作為訓練集，后面的作為測試集num_train = 700data_train = admissions[:num_train]data_test = admissions[num_train:]logistic_model = LogisticRegression()logistic_model.fit(data_train[['gpa', 'gre']], data_train['admit'])# 進行測試fitted_test = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:, 1] #因為predict_proba返回的是一個兩列的矩陣，矩陣的每一行代表的是對一個事件的預測結果，第一列代表該事件不會發生的概率，第二列代表的是該事件會發生的概率。而這里需要的是第二列的數據plt.scatter(data_test['gre'], fitted_test)plt.xlabel('gre')plt.ylabel('probability ')plt.show()`

`# predict()函數會自動把閥值設置為0.5predicted = logistic_model.predict(data_train[['gpa','gre']])# 計算在訓練集中正確預測的准確率accuracy_train = (predicted == data_train['admit']).mean()#計算在測試集中正確預測的准確率predicted = logistic_model.predict(data_test[['gpa','gre']])accuracy_test = (predicted == data_test['admit']).mean()`

ROC曲線

`from sklearn.metrics import roc_curve, roc_auc_scoretrain_probs = logistic_model.predict_proba(data_train[['gpa', 'gre']])[:,1]test_probs = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:,1]#計算AUCauc_train = roc_auc_score(data_train["admit"], train_probs)auc_test = roc_auc_score(data_test["admit"], test_probs)print('Auc_train: {}'.format(auc_train))print('Auc_test: {}'.format(auc_test))# 計算ROC曲線roc_train = roc_curve(data_train["admit"], train_probs)roc_test = roc_curve(data_test["admit"], test_probs)# 作圖plt.plot(roc_train[0], roc_train[1])plt.plot(roc_test[0], roc_test[1])`