我无法理解StandardScaler
文档中sklearn
的{{3}}。
有人能用简单的语言向我解释这个吗?
答案 0 :(得分:47)
StandardScaler
背后的想法是,它将转换您的数据,使其分布的平均值为0,标准差为1。
给定数据的分布,数据集中的每个值将减去样本均值,然后除以整个数据集的标准差。
答案 1 :(得分:33)
a[a[:,-1].argsort()]
和mean = 0
)您的功能。您应该记住的一件重要事情是大多数(如果不是全部)standard deviation = 1
模型/类/函数,期望输入矩阵scikit-learn
,其尺寸/形状X
。这是非常重要的。其他一些库期望输入反向。
[number_of_samples, number_of_features]
将规范化功能(X的每一列,单独!!!),以便每个列/功能/变量都有StandardScaler()
和mean = 0
。示例:强>
standard deviation = 1
验证每个要素(列)的平均值是否为0:
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[0, 0], [0, 0], [1, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0 0]
[0 0]
[1 1]
[1 1]]
print(scaled_data)
[[-1. -1.]
[-1. -1.]
[ 1. 1.]
[ 1. 1.]]
验证每个要素(列)的标准是否为1:
scaled_data.mean(axis = 0)
array([0., 0.])
数学:
答案 2 :(得分:21)
如何计算:
您可以在这里阅读更多内容:
答案 3 :(得分:11)
StandardScaler执行标准化的任务。通常,数据集包含比例不同的变量。例如Employee数据集将包含值列范围为20-70 的AGE列和值列表<10000>范围为10000-80000 的SALARY列。规模,它们在构建机器学习模型时被标准化以具有共同的规模。
答案 4 :(得分:7)
当您想要比较与不同单位对应的数据时,这非常有用。在这种情况下,您要删除单位。要以一致的方式对所有数据执行此操作,您将以方差为单位且系列平均值为0的方式转换数据。
答案 5 :(得分:5)
上面的答案很棒,但是我需要一个简单的例子来减轻过去的担忧。我想确保它确实单独处理了每一列。现在,我可以放心了,找不到什么例子引起了我的关注。所有列 ARE 均按上述说明分别缩放。
import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler
data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]
df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')
sc_X = StandardScaler()
df = sc_X.fit_transform(df)
num_cols = len(df[0,:])
for i in range(num_cols):
col = df[:,i]
col_stats = ss.describe(col)
print(col_stats)
DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)
答案 6 :(得分:3)
答案 7 :(得分:3)
以下是一个简单的工作示例,用于解释标准化计算的工作原理。理论部分已经在其他答案中得到了很好的解释。
>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)
>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])
>>>np.mean(a, axis=0)
array([6. , 2.5])
>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)
#Xchanged = (X−μ)/σ WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z
计算
正如您在输出中看到的,平均值为[6。 ,2.5]和标准偏差为[1.41421356,0.8660254]
数据为(0,1)位置为2 标准化=(2-2.5)/0.8660254 = -0.57735027
(1,0)位置的数据为4 标准化=(4-6)/1.41421356 = -1.414
标准化后的结果
检查标准化后的均值和标准偏差
注意:-2.77555756e-17非常接近0。
参考
答案 8 :(得分:0)
我们连续应用function CalendarPage() {
const [currentEvents, setCurrentEvents] = useState(INITIAL_EVENTS);
console.log(currentEvents);
const handleDateSelect = (selectInfo) => {
let title = prompt('Please enter a new title for your event');
let calendarApi = selectInfo.view.calendar;
calendarApi.unselect(); // clear date selection
if (title) {
calendarApi.addEvent({
id: createEventId(),
title,
start: selectInfo.startStr,
end: selectInfo.endStr,
allDay: selectInfo.allDay
});
}
};
const handleEventClick = (clickInfo) => {
clickInfo.event.remove();
};
const handleEvents = (events) => {
setCurrentEvents({
currentEvents: events
});
};
function renderEventContent(eventInfo) {
return (
<>
<b>{eventInfo.timeText}</b>
<i>{eventInfo.event.title}</i>
</>
);
}
return (
<FullCalendar
plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}
headerToolbar={{
left: 'prev,next,today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
initialView='dayGridMonth'
locale={el}
editable={true}
selectable={true}
selectMirror={true}
dayMaxEvents={true}
weekends={true}
initialEvents={currentEvents}
select={handleDateSelect}
eventContent={renderEventContent}
eventClick={handleEventClick}
eventsSet={handleEvents}
/>
);
}
。
因此,对于列中的每一行(我假设您正在使用Pandas DataFrame):
StandardScalar()
几点-
之所以称为标准标量,是因为我们将其除以分布的标准偏差(要素的偏差)。同样,您可以猜测x_new = (x_original - mean_of_distribution) / std_of_distribution
。
应用MinMaxScalar()
后,原始分布保持不变。常见的误解是将分布更改为正态分布。我们只是将范围压缩为[0,1]。