【學習筆記】人民郵電出版社《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...