python數據預處理方式
一、數據標準化
StandardScaler (基於特徵矩陣的列,將屬性值轉換至服從正態分佈)
標準化是依照特徵矩陣的列處理數據,即轉換爲均值爲0,方差爲1的正態分佈
將樣本的特徵值轉換到同一量綱下
常用與基於正態分佈的算法,比如迴歸
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd
data = [[0, 0, 2], [0, 0, 1], [1, 3, 1], [1, 2, 1]]
scaler = StandardScaler()
train_data = pd.DataFrame(data=scaler.fit_transform(data), columns=["a", "b", "c"]) # 轉化DataFrame數據類型,用於模型訓練
model = RandomForestClassifier(max_depth=3, n_estimators=10) # 隨機森林的構造
model.fit(train_data, [1, 2, 1, 2]) # 傳入訓練數據與模擬標籤數據
print(model.predict([[1, 2, 3], [2, -1, 1]])) # 傳入測試數據,支持傳遞DataFrame類型也支持傳遞二維數組
二、數據歸一化
MinMaxScaler (區間縮放,基於最大最小值,將數據轉換到0,1區間上的)
提升模型收斂速度,提升模型精度
常見用於神經網絡
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data = [[1, 2, 10], [3, 2, 7], [5, 6, 4, ], [7, 8, 1]]
scaler = MinMaxScaler(feature_range=(0, 1), copy=True) # feature_range 手動指定範圍爲0到1之間
train_data = pd.DataFrame(data=scaler.fit_transform(data), columns=["a", "b", "c"]) # 轉化DataFrame數據類型,用於模型訓練
1.隨機森林
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
data_values = pd.DataFrame(data=[[1, 2], [2, 3], [3, 4]], columns=["k1", "k2"]) # data表示數據, columns表示列字段名稱
model = RandomForestClassifier(max_depth=3, n_estimators=10) # max_depth 樹的最大深度,n_estimators 樹的數量
model.fit(data_values, pd.Series(data=[0, 1, 1]))
predict = model.predict([[1, 2], [2, 3]])
print(predict)
2.決策樹
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier() # 隨機森林
data_values = pd.DataFrame(data=[[1, 2, 3, 0], [1, 4, 2, 1]], columns=["a", "b", "c", "label"]) # 構造模擬數據
train_label_data = data_values["label"] # 獲取標籤列
train_feature_data = data_values.drop(["label"], axis=1) # 刪除標籤列
model.fit(train_feature_data, train_label_data) # 開始訓練
test_data = pd.DataFrame(data=[[1, 2, 3], [1, 4, 2]]) # 使用模型
print(model.predict(test_data)) #使用模型檢測數據
3.邏輯迴歸
from sklearn.linear_model import LogisticRegression
model = LogisticRegression() #定義模型對象,使用模型參考之前的步驟
4.SVM支持向量機
from sklearn import svm
model = svm.SVC()
5.python服務封裝
from flask import Flask, request, jsonify
app = Flask(__name__)
if __name__ == '__main__':
app.config['JSON_AS_ASCII'] = False # 設置中文響應格式不亂碼
app.run(host="0.0.0.0", port=5000)
def format_request():
"""
格式化請求參數
:return: 將參數以key和value的形式返回
"""
param = {}
for k, v in request.args.items():
param[k] = eval(v)
data = request.get_data()
if data != b'':
for k, v in json.loads(data.decode('utf-8')).items():
param[k] = v
return param
@app.route('/test', methods=['POST', 'GET'])
def test():
"""
測試入口
:return:
"""
param = format_request()
logger.info(param)
response = {}
for k, v in param.items():
response[k] = v
return jsonify(response)