Phython學習 線性分類器 邏輯回歸的呼叫

2021-09-22 20:04:24 字數 3329 閱讀 9007

【學習筆記】人民郵電出版社《python機器學習》學習記錄。

以下程式呼叫了機器學習的第三方庫scikit-learn,使用該庫,方便簡潔。

線性回歸、邏輯回歸、線性分類器的關係:線性回歸是回歸;邏輯回歸是分類,邏輯回歸基於線性回歸進行分類;線性分類器是以超平面為決策邊界的分類器,與線性回歸沒有必然的關係,線性分類器包括邏輯回歸、感知機、svm(線性核函式)。

import pandas

from pylab import rcparams

rcparams['figure.figsize'] = 10,8

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import standardscaler

from sklearn import preprocessing

from sklearn import linear_model

import warnings

warnings.filterwarnings('ignore')

titanic_data = pandas.read_csv('e:\\titanic_data.csv') #載入資料,鐵達尼號資料,標籤是倖存與否

titanic_data = titanic_data[['survived', 'pclass', '***', 'age', 'sibsp', 'parch', 'embarked', 'fare']]

print(titanic_data) #(891, 8)共891條資料、8個屬性

#---------特徵工程,空值處理----------

print(titanic_data.isnull().any()) #年齡、登船地點有空值,需要進行特徵工程

print(titanic_data.isnull().sum()) #空值數量,年齡177個空值;登船地點2個空值

#空值處理策略:用平均值替換空值

titanic_data['age'].fillna((titanic_data['age'].mean()), inplace=true)

#空值處理策略:放棄這兩條記錄,不會對演算法有大的影響

titanic_data.dropna(inplace=true)

#---------分割訓練資料和測試資料--------

titanic_data_x = titanic_data[['pclass', '***', 'age', 'sibsp', 'parch', 'embarked', 'fare']]

titanic_data_y = titanic_data[['survived']] #型別仍然為dataframe

x_train, x_test, y_train, y_test = train_test_split(titanic_data_x, titanic_data_y, test_size=0.2)

#----------特徵工程,年齡、票價進行標準化處理-------------

age_scaler = standardscaler() #z-score標準化,均值0,方差1

age_scaler.fit(pandas.dataframe((x_train['age']))) #擬合

x_train[['age']] = age_scaler.transform(x_train[['age']]) #進行轉化

fare_scaler = standardscaler()

fare_scaler.fit(pandas.dataframe((x_train['fare'])))

x_train[['fare']] = fare_scaler.transform(x_train[['fare']])

x_train['***'] = x_train['***'].map() #性別特徵直接轉化成0和1

embarked_encoder = preprocessing.labelencoder() #標準化標籤,標籤值轉化成(0,1,2)

embarked_encoder.fit(pandas.dataframe(x_train['embarked']))

x_train[['embarked']] = embarked_encoder.transform(x_train[['embarked']])

#---------相關性分析,刪除相關性比較高的列--------

#seaborn.heatmap(x_train.corr()) #協方差熱點圖

print(x_train.corr()) #列印特徵值的協方差矩陣

del x_train['pclass'] #刪除相關性很高的列

x_train_original = x_train

print(x_train)

print(y_train)

x_train = x_train.values

y_train = y_train.values

print(type(y_train))

logregression = linear_model.logisticregression()

logregression.fit(x_train, y_train)

print('係數:\n', logregression.coef_)

print('截距:\n', logregression.intercept_)

#----------對x_test進行同樣的特徵過程-----------------------

x_test[['age']] = age_scaler.transform(x_test[['age']]) #年齡進行轉化

x_test[['fare']] = fare_scaler.transform(x_test[['fare']])

x_test['***'] = x_test['***'].map() #性別特徵直接轉化成0和1

embarked_encoder = preprocessing.labelencoder() #標準化標籤,標籤值轉化成(0,1,2)

embarked_encoder.fit(pandas.dataframe(x_test['embarked']))

x_test[['embarked']] = embarked_encoder.transform(x_test[['embarked']])

del x_test['pclass'] #刪除相關性很高的列

y_pred = logregression.predict(x_test) #分類結果

print(y_pred)

線性分類器和非線性分類器

線性和非線性的區別 1.線性linear,指量與量之間按比例 成直線的關係,在數學上可以理解為一階導數為常數的函式 非線性non linear則指不按比例 不成直線的關係,一階導數不為常數。2.線性的可以認為是1次曲線,比如y ax b 即成一條直線 非線性的可以認為是2次以上的曲線,比如y ax ...

機器學習總結之 線性分類器與非線性分類器

1 線性分類器 1.1線性分類器的定義 線性分類器就是用乙個 超平面 將正 負樣本隔離開,如 1 二維平面上的正 負樣本用一條直線來進行分類 2 三維立體空間內的正 負樣本用乙個平面來進行分類 3 n維空間內的正負樣本用乙個超平面來進行分類。1.2常見的線性分類器 常見的線性分類器有 lr,貝葉斯分...

線性分類器

softmax回歸是多分類,其他都是二分類 f x w,b w tx b y in r g f x w begin 1 if f x w 0 0 if f x w 0 end y x in mathbb d y in g f x w begin 1 if f x w 0 0 if f x w 0 e...