이 기사의 대상 독자:
이 기사에서는 .csv 형식 파일을 사용하여 Python의 다양한 작업은 물론 배열, 텍스트 파일 등과 같은 기타 형식을 보여줍니다.
우리는 Pandas가 컴퓨터 메모리(RAM)를 사용하여 기계 학습 데이터 세트를 로드한다는 것을 알고 있습니다. 하지만 컴퓨터에 8GB의 메모리(RAM)가 있는데 왜 Pandas는 여전히 2GB 데이터 세트를 로드할 수 없나요? 그 이유는 Pandas를 사용하여 2GB 파일을 로드하려면 2GB RAM뿐만 아니라 더 많은 메모리가 필요하기 때문입니다. 전체 메모리 요구 사항은 데이터 세트의 크기와 해당 데이터 세트에서 수행할 작업에 따라 다르기 때문입니다.
다음은 컴퓨터 메모리에 로드된 다양한 크기의 데이터 세트를 빠르게 비교한 것입니다.
또한 Pandas는 운영 체제의 코어 하나만 사용하므로 처리 속도가 느려집니다. 즉, 팬더는 병렬성(문제를 더 작은 작업으로 나누는 것)을 지원하지 않는다고 말할 수 있습니다.
컴퓨터에 4개의 코어가 있다고 가정합니다. 다음 그림은 CSV 파일을 로드할 때 Pandas가 사용하는 코어 수를 보여줍니다.
Pandas가 일반적으로 대규모 기계 학습 데이터 세트를 처리하는 데 사용되지 않는 주요 이유는 다음과 같습니다. 다음은 하나는 컴퓨터 메모리 사용량이고, 두 번째는 병렬성 부족입니다. NumPy와 Scikit-learn에서는 대규모 데이터 세트에 대해 동일한 문제가 발생합니다.
이 두 가지 문제를 해결하기 위해 Dask라는 Python 라이브러리를 사용할 수 있습니다. 이를 통해 대규모 데이터 세트에 대해 Pandas, NumPy 및 ML과 같은 다양한 작업을 수행할 수 있습니다.
Dask는 파티션에 데이터 세트를 로드하는 반면, 팬더는 일반적으로 전체 기계 학습 데이터 세트를 데이터 프레임으로 로드합니다. Dask에서는 데이터 세트의 각 파티션이 Pandas 데이터 프레임으로 간주됩니다.
Dask는 한 번에 하나의 파티션을 로드하므로 메모리 할당 오류에 대해 걱정할 필요가 없습니다.
다음은 dask를 사용하여 컴퓨터 메모리에 다양한 크기의 기계 학습 데이터 세트를 로드하는 방법을 비교한 것입니다.
Dask는 별도의 코어를 사용하여 데이터를 여러 파티션으로 분할하여 계산을 수행하므로 병렬성 문제를 해결합니다. 데이터 세트에서 더 빠르게.
컴퓨터에 4개의 코어가 있다고 가정할 때 dask가 5GB csv 파일을 로드하는 방법은 다음과 같습니다.
dask 라이브러리를 사용하려면 다음 명령을 사용하여 설치할 수 있습니다.
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span>
Dask에는 dask와 같은 여러 모듈이 있습니다. array, dask.dataframe 및 dask.distributed는 각각 해당 라이브러리(예: NumPy, pandas 및 Tornado)를 설치한 경우에만 작동합니다.
dask.dataframe은 대용량 csv 파일을 처리하는 데 사용됩니다. 먼저 pandas를 사용하여 8GB 크기의 데이터 세트를 가져오려고 했습니다.
<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pandas</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pd</span><br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">df</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pd</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">read_csv</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">“data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">csv”</span>)
16GB RAM 노트북에서 메모리 할당 오류가 발생했습니다.
이제 dask.dataframe을 사용하여 동일한 8GB 데이터를 가져와 보세요.
dask는 전체 8GB 파일을 ddf 변수에 로드하는 데 1초밖에 걸리지 않았습니다.
ddf 변수의 출력을 살펴보겠습니다.
보시다시피 실행시간은 0.5초이며, 119개의 파티션으로 나누어져 나와있습니다.
다음을 사용하여 데이터프레임의 파티션 수를 확인할 수도 있습니다.
기본적으로 dask는 8GB CSV 파일을 119개의 파티션(각 파티션 크기는 64MB)에 로드했습니다. 이는 사용 가능한 파티션을 기준으로 합니다. 실제 메모리와 컴퓨터의 코어 수를 기반으로 수행됩니다.
CSV 파일을 로드할 때 blocksize 매개변수를 사용하여 나만의 파티션 수를 지정할 수도 있습니다.
이제 문자열 값이 400MB인 blocksize 매개변수가 지정되어 각 파티션 크기가 400MB가 됩니다. 얼마나 많은 파티션이 있는지 살펴보겠습니다.
핵심 포인트: Dask DataFrames를 사용할 때 좋은 규칙 경험상 파티션을 100MB 미만으로 유지하는 것이 좋습니다.
데이터프레임의 특정 파티션은 다음을 사용하여 호출할 수 있습니다.
목록의 마지막 요소를 호출할 때 했던 것처럼 마지막 파티션도 음수 인덱스를 사용하여 호출할 수 있습니다.
데이터세트의 모양을 살펴보겠습니다.
len()을 사용하여 데이터세트의 행 수를 확인할 수 있습니다.
Dask에는 이미 예제 데이터세트가 포함되어 있습니다. 시계열 데이터를 사용하여 dask가 데이터 세트에서 수학적 연산을 수행하는 방법을 보여 드리겠습니다.
dask.datasets를 가져온 후 ddf_20y는 2000년 1월 1일부터 2021년 12월 31일까지의 시계열 데이터를 로드했습니다.
시계열 데이터의 파티션 수를 살펴보겠습니다.
20년간의 시계열 데이터는 8035개의 파티션으로 분산되어 있습니다.
pandas에서는 head를 사용하여 데이터 세트의 처음 몇 행을 인쇄하며 dask에서도 마찬가지입니다.
id 열의 평균을 계산해 보겠습니다.
dask는 게으른 계산을 사용하기 때문에 데이터프레임의 총 행 수를 인쇄하지 않습니다(출력은 필요할 때까지 표시되지 않습니다). 출력을 표시하려면 계산 메소드를 사용할 수 있습니다.
데이터 세트의 각 열을 정규화하려고 한다고 가정하면(값을 0과 1 사이로 변환) Python 코드는 다음과 같습니다.
열을 반복하여 각 열의 최소 합계를 찾습니다. 열 최대값을 계산하고 간단한 수학 공식을 사용하여 이러한 열을 정규화합니다.
핵심 사항: 정규화 예에서는 실제 수치 계산이 발생한다고 생각하지 마십시오. 이는 단지 게으른 평가일 뿐입니다(필요할 때까지 출력이 표시되지 않습니다).
Dask는 배열을 작은 덩어리로 분할하며, 각 덩어리는 NumPy 배열입니다.
dask.arrays는 대규모 배열을 처리하는 데 사용됩니다. 다음 Python 코드는 dask를 사용하여 10000 x 10000 배열을 만들고 이를 x 변수에 저장합니다.
x 변수를 호출하면 배열에 대한 다양한 정보가 생성됩니다.
DASK 배열에서 수학 연산을 수행하는 Python 예:
正如您所看到的,由于延迟执行,它不会向您显示输出。我们可以使用compute来显示输出:
dask 数组支持大多数 NumPy 接口,如下所示:
但是,Dask Array 并没有实现完整 NumPy 接口。
你可以从他们的官方文档中了解更多关于 dask.arrays 的信息。
假设您想对机器学习数据集执行一些耗时的操作,您可以将数据集持久化到内存中,从而使数学运算运行得更快。
从 dask.datasets 导入了时间序列数据
让我们取数据集的一个子集并计算该子集的总行数。
计算总行数需要 27 秒。
我们现在使用 persist 方法:
持久化我们的子集总共花了 2 分钟,现在让我们计算总行数。
同样,我们可以对持久化数据集执行其他操作以减少计算时间。
persist应用场景:
Dask ML有助于在大型数据集上使用流行的Python机器学习库(如Scikit learn等)来应用ML(机器学习)算法。
什么时候应该使用 dask ML?
正如你所看到的,随着模型大小的增加,例如,制作一个具有大量超参数的复杂模型,它会引起计算边界的问题,而如果数据大小增加,它会引起内存分配错误。因此,在这两种情况下(红色阴影区域)我们都使用 Dask 来解决这些问题。
如官方文档中所述,dask ml 库用例:
让我们看一下 Dask.distributed 的架构:
Dask 让您能够在计算机集群上运行任务。在 dask.distributed 中,只要您分配任务,它就会立即开始执行。
简单地说,client就是提交任务的你,执行任务的是Worker,调度器则执行两者之间通信。
python -m <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span> distributed –upgrade
如果您使用的是单台机器,那么就可以通过以下方式创建一个具有4个worker的dask集群
如果需要dashboard,可以安装bokeh,安装bokeh的命令如下:
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">bokeh</span>
就像我们从 dask.distributed 创建客户端一样,我们也可以从 dask.distributed 创建调度程序。
要使用 dask ML 库,您必须使用以下命令安装它:
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pip</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dask</span>-ml
我们将使用 Scikit-learn 库来演示 dask-ml 。
Grid_Search 메서드를 사용한다고 가정하면 일반적으로 다음 Python 코드를 사용합니다.
dask.distributed를 사용하여 클러스터를 만듭니다.
클러스터를 사용하여 scikit-learn 모델을 맞추려면 joblib만 사용하면 됩니다.
위 내용은 Python에서 대규모 기계 학습 데이터 세트를 처리하는 쉬운 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!