sklearn機器學習常用資料處理總結
資料才是王道→資料預處理與資料集構建
from IPython.display import Image
%matplotlib inline
# Added version check for recent scikit-learn 0.18 checks
from distutils.version import LooseVersion as Version
from sklearn import __version__ as sklearn_version
1.處理預設值
import pandas as pd from io import StringIO csv_data = '''A,B,C,D 1.0,2.0,3.0,4.0 5.0,6.0,,8.0 10.0,11.0,12.0,''' # If you are using Python 2.7, you need # to convert the string to unicode: csv_data = unicode(csv_data) df = pd.read_csv(StringIO(csv_data)) df
df.isnull().sum()
2.可以直接刪除預設值多的樣本或者特徵3.重新計算預設值df.dropna() #預設行 df.dropna(axis=1) # only drop rows where all columns are NaN df.dropna(how='all') # drop rows that have not at least 4 non-NaN values df.dropna(thresh=4) # only drop rows where NaN appear in specific columns (here: 'C') df.dropna(subset=['C'])
from sklearn.preprocessing import Imputer
imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
imr = imr.fit(df)
imputed_data = imr.transform(df.values)
imputed_data
df.values
4.處理類別型資料5.序列特徵對映import pandas as pd df = pd.DataFrame([['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 15.3, 'class1']]) df.columns = ['color', 'size', 'price', 'classlabel'] df
size_mapping = {'XL': 3,
'L': 2,
'M': 1}
df['size'] = df['size'].map(size_mapping)
df
inv_size_mapping = {v: k for k, v in size_mapping.items()}
df['size'].map(inv_size_mapping)
6.類別編碼import numpy as np
class_mapping = {label: idx for idx, label in enumerate(np.unique(df['classlabel']))}
class_mapping
df['classlabel'] = df['classlabel'].map(class_mapping)
df
inv_class_mapping = {v: k for k, v in class_mapping.items()}
df['classlabel'] = df['classlabel'].map(inv_class_mapping)
df
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y = class_le.fit_transform(df['classlabel'].values)
y
class_le.inverse_transform(y)
7.對類別型的特徵用one-hot編碼X = df[['color', 'size', 'price']].values
color_le = LabelEncoder()
X[:, 0] = color_le.fit_transform(X[:, 0])
X
array([[1, 1, 10.1], [2, 2, 13.5], [0, 3, 15.3]], dtype=object)
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(categorical_features=[0])
ohe.fit_transform(X).toarray()
array([[ 0. , 1. , 0. , 1. , 10.1], [ 0. , 0. , 1. , 2. , 13.5], [ 1. , 0. , 0. , 3. , 15.3]])
pd.get_dummies(df[['price', 'color', 'size']])
8.對連續值特徵做幅度縮放(scaling)
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
X_train_std = stdsc.fit_transform(X_train)
X_test_std = stdsc.transform(X_test)
A visual example:ex = pd.DataFrame([0, 1, 2, 3, 4, 5])
# standardize
ex[1] = (ex[0] - ex[0].mean()) / ex[0].std(ddof=0)
# Please note that pandas uses ddof=1 (sample standard deviation)
# by default, whereas NumPy's std method and the StandardScaler
# uses ddof=0 (population standard deviation)
# normalize
ex[2] = (ex[0] - ex[0].min()) / (ex[0].max() - ex[0].min())
ex.columns = ['input', 'standardized', 'normalized']
ex
9.特徵選擇
通過L1正則化的截斷性效應選擇,不重要的都為0,特徵矩陣變成稀疏矩陣。
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty='l1', C=0.1)
lr.fit(X_train_std, y_train)
print('Training accuracy:', lr.score(X_train_std, y_train))
print('Test accuracy:', lr.score(X_test_std, y_test))
lr.intercept_
lr.coef_
10.通過隨機森林對特徵重要性排序from sklearn.ensemble import RandomForestClassifier
feat_labels = df_wine.columns[1:]
forest = RandomForestClassifier(n_estimators=10000,
random_state=0,
n_jobs=-1)
forest.fit(X_train, y_train)
importances = forest.feature_importances_
indices = np.argsort(importances)[::-1]
for f in range(X_train.shape[1]):
print("%2d) %-*s %f" % (f + 1, 30,
feat_labels[indices[f]],
importances[indices[f]]))
plt.title('Feature Importances')
plt.bar(range(X_train.shape[1]),
importances[indices],
color='lightblue',
align='center')
plt.xticks(range(X_train.shape[1]),
feat_labels[indices], rotation=90)
plt.xlim([-1, X_train.shape[1]])
plt.tight_layout()
#plt.savefig('./random_forest.png', dpi=300)
plt.show()
if Version(sklearn_version) < '0.18':
X_selected = forest.transform(X_train, threshold=0.15)
else:
from sklearn.feature_selection import SelectFromModel
sfm = SelectFromModel(forest, threshold=0.15, prefit=True)
X_selected = sfm.transform(X_train)
X_selected.shape
Now, let's print the 3 features that met the threshold criterion for feature selection that we set earlier (note that this code snippet does not appear in the actual book but was added to this notebook later
for illustrative purposes):for f in range(X_selected.shape[1]):
print("%2d) %-*s %f" % (f + 1, 30,
feat_labels[indices[f]],
importances[indices[f]]))
相關推薦
sklearn機器學習常用資料處理總結
資料才是王道→資料預處理與資料集構建 from IPython.display import Image %matplotlib inline # Added version check for recent scikit-learn 0.18 checks from
機器學習——常用排序演算法總結
我們通常所說的排序演算法往往指的是內部排序演算法,即資料記錄在記憶體中進行排序。排序演算法大體可分為兩種: 一種是比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。 另一種是非比較排序,時間複雜度可以達到O(
機器學習之 資料預處理(sklearn preprocessing)
資料預處理(data preprocessing)是指在主要的處理以前對資料進行的一些處理。如對大部分地球物理面積性觀測資料在進行轉換或增強處理之前,首先將不規則分佈的測網經過插值轉換為規則網的處理,以利於計算機的運算。另外,對於一些剖面測量資料,如地震資料預處理有垂直疊加、
機器學習裡資料預處理及特徵工程總結
機器學習裡有一句名言:資料和特徵決定了機器學習的上限,而模型和演算法的應用只是讓我們逼近這個上限。這個說法形象且深刻的提出前期資料處理和特徵分析的重要性。這一點從我們往往用整個資料探勘全流程60%以上的時間和精力去做建模前期的資料處理和特徵分析也能看出。那
關於機器學習中文本處理的一些常用方法
機器學習 tfidf lda word2vec前言 文本挖掘也是機器學習或者說是人工智能最需要處理的一類信息(其它的諸如語音、圖像及視頻處理等);隨著數字信息化和網絡化進程不斷深入,用戶的在線交流、發布、共享等都被以文字形式記錄下來,它們成為分析語言和理解社會的重要素材來源,對於文本的挖掘主要包括文檔分類、
Python機器學習之資料預處理
# -*- coding: utf-8 -*- """ Created on Sat Sep 29 22:39:26 2018 @author: Lxiao217 email:[email protected] """ #資料預處理 #CSV(comma-srpared values,
機器學習中資料的歸一化處理
資料的標準化(normalization)是將資料按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除資料的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權。 其中最典型的就是資料的歸一化處理,即將資料統一對映到[0,1]區間上
資料預處理程式碼分享——機器學習與資料探勘
資料預處理分為6步: 第1步:匯入NumPy和Pandas庫。NumPy和Pandas是每次都要匯入的庫,其中Numpy包含了數學計算函式,Pnadas是一個用於匯入和管理資料集(Data Sets)的類庫。 第2步:匯入資料集。資料集一般都是.csv格式,csv
機器學習-3.資料特徵預處理與資料降維
特徵預處理定義:通過特定的統計方法(數學方法)將資料轉換成演算法要求的資料。 處理方法 數值型資料:標準縮放(1.歸一化,2.標準化);缺失值。 類別型資料:one-hot編碼。 時間型別:時間的切分。 預處理API:sklear
機器學習之資料標準化處理
機器學習之資料標準化處理 # -*- coding: utf-8 -*- """ Created on Sat Dec 8 16:41:32 2018 @author: muli """ from sklearn.preprocessing import MinM
機器學習常用sklearn庫
Sklearn.model_selection(模型選擇) Cross_val_score:交叉驗證 Train_test_split:資料切割 GridsearchCV:網格搜尋 Sklearn.metrics(覆蓋了分類任務中大部分常用驗證指標) Confusion_matrix
[ 人工智慧]模式識別、機器學習、資料探勘當中的各種距離總結
模式識別、機器學習、資料探勘當中的各種距離總結 在做分類時常常需要估算不同樣本之間的相似性度量(SimilarityMeasurement),這時通常採用的方法就是計算樣本間的“距離”(Distance)。採用什麼樣的方法計算距離是很講究,甚至關係到分類的正確與否。 本文目錄:
機器學習常用演算法的優缺點總結
決策樹 一、 決策樹優點 1、決策樹易於理解和解釋,可以視覺化分析,容易提取出規則。 2、可以同時處理標稱型和數值型資料。 3、測試資料集時,執行速度比較快。 4、決策樹可以很好的擴充套件到大型資料庫中,同時它的大小獨立於資料庫大小。 二、決策樹缺點 1、對缺
機器學習常用演算法總結
機器學習無疑是當前資料分析領域的一個熱點內容。很多人在平時的工作中都或多或少會用到機器學習的演算法。本文總結一下常見的機器學習演算法,以供參考。機器學習的演算法很多,很多演算法是一類演算法,而有些演算法又是從其他演算法中延伸出來的。這裡從兩個方面進行總結,第一個方面是學習的
Coursera課程下載和存檔計劃三:機器學習 & 自然語言處理 & 推薦系統 & 資料探勘相關公開課
週末對之前儲存和下載的Coursera課程做了一下整理和歸類,先送出機器學習、自然語言處理、推薦系統和資料探勘相關的14門課程資源。這些公開課資源很多來自於之前課程圖譜群內朋友的或者微博上的朋友的分享,這裡做了一些補充,主要針對Coursera舊課程平臺的課程進行備份和分享
sklearn機器學習庫中資料的標準化
本篇部落格主要借鑑的是http://www.cnblogs.com/chaosimple/p/4153167.html 這位大牛的部落格,最近在學習sklearn,寫演算法基本上都會用到標準化, 資
機器學習常用演算法優點及缺點總結
決策樹 一、 決策樹優點 1、決策樹易於理解和解釋,可以視覺化分析,容易提取出規則。 2、可以同時處理標稱型和數值型資料。 3、測試資料集時,執行速度比較快。 4、決策樹可以很好的擴充套件到大型資料庫中,同時它的大小獨立於資料庫大小。 二、決策樹缺點 1、
機器學習之 資料預處理 preprocessing
前言對於資料的預處理,沒有固定的步驟。 下文寫的僅僅的常規的一些小步驟。 具體的預處理,還需要根據資料以及需求來自行處理。====================================PythonSTEP1、匯入依賴包import numpy as np import matplotlib.pypl
「機器學習」資料不平衡情況下的處理方法(1)
1. background 前端時間想換工作,於是面了幾家公司。發現了公司面試基本會問當資料集分佈不平衡的時候該怎麼處理。在現實做專案的時候這種情況也會很多。於是做了一下整理。2. 資料不平衡 資料不平衡的情況主要出現在二分類。比如現在公司做的重要郵件檢測。幾千個郵
FPGA機器學習之資料探勘,影象處理,機器視覺,模式識別,人工智慧,機器學習的關係
資料探勘: 資料探勘從字面上就已經很好理解了,就是從一堆資料中,挖掘出一些有用的資訊來的過程。比如說,我們的搜尋資料,如果某個地區大部分人都在搜尋MH370,表示他們在關注這個事情。我們就可以推薦一些安全知識,飛機知識過去。同樣的也可能會有蠟燭銷售高潮