ก้าวแรกของคุณใน Data Science ไททานิค

เกริ่นนำสั้นๆ

ฉันเชื่อว่าเราสามารถทำสิ่งต่างๆ ได้มากขึ้นหากเราได้รับคำแนะนำทีละขั้นตอนที่จะบอกเราว่าต้องทำอะไรและต้องทำอย่างไร ตัวฉันเองจำช่วงเวลาในชีวิตที่ฉันไม่สามารถเริ่มต้นบางสิ่งบางอย่างได้เพราะมันยากที่จะเข้าใจว่าจะเริ่มต้นจากตรงไหน บางที กาลครั้งหนึ่งบนอินเทอร์เน็ต คุณเห็นคำว่า "วิทยาศาสตร์ข้อมูล" และตัดสินใจว่าคุณห่างไกลจากสิ่งนี้ และผู้คนที่ทำสิ่งนี้ก็อยู่ที่ไหนสักแห่งในโลกอื่น ไม่ พวกเขาอยู่ที่นี่ และบางทีอาจเป็นเพราะผู้คนจากสาขานี้ บทความจึงปรากฏบนฟีดของคุณ มีหลักสูตรมากมายที่จะช่วยให้คุณคุ้นเคยกับงานฝีมือนี้ แต่ที่นี่ฉันจะช่วยให้คุณเริ่มก้าวแรก

คุณพร้อมหรือยัง? ฉันขอบอกคุณทันทีว่าคุณจะต้องรู้จัก Python 3 เนื่องจากนั่นคือสิ่งที่ฉันจะใช้ที่นี่ ฉันแนะนำให้คุณติดตั้งบน Jupyter Notebook ล่วงหน้าหรือดูวิธีใช้ google colab

ขั้นตอนที่หนึ่ง

ก้าวแรกของคุณใน Data Science ไททานิค

Kaggle คือผู้ช่วยคนสำคัญของคุณในเรื่องนี้ โดยหลักการแล้วคุณสามารถทำได้โดยไม่มีมัน แต่ฉันจะพูดถึงเรื่องนี้ในบทความอื่น นี่คือแพลตฟอร์มที่จัดการแข่งขัน Data Science ในการแข่งขันแต่ละครั้ง ในระยะแรก คุณจะได้รับประสบการณ์ที่ไม่สมจริงในการแก้ปัญหาประเภทต่างๆ ประสบการณ์การพัฒนา และประสบการณ์การทำงานเป็นทีม ซึ่งเป็นสิ่งสำคัญในยุคของเรา

เราจะรับหน้าที่ของเราจากที่นั่น มันถูกเรียกว่า "ไททานิค" เงื่อนไขคือ ทำนายว่าแต่ละคนจะรอดหรือไม่ โดยทั่วไปแล้ว งานของบุคคลที่เกี่ยวข้องกับ DS คือการรวบรวมข้อมูล ประมวลผล ฝึกอบรมแบบจำลอง พยากรณ์ และอื่นๆ ใน kaggle เราได้รับอนุญาตให้ข้ามขั้นตอนการรวบรวมข้อมูลได้ - ข้อมูลเหล่านี้จะถูกนำเสนอบนแพลตฟอร์ม เราจำเป็นต้องดาวน์โหลดและเริ่มต้นได้!

คุณสามารถทำได้ดังนี้:

แท็บข้อมูลมีไฟล์ที่มีข้อมูล

ก้าวแรกของคุณใน Data Science ไททานิค

ก้าวแรกของคุณใน Data Science ไททานิค

เราดาวน์โหลดข้อมูล เตรียมสมุดบันทึก Jupyter และ...

ขั้นตอนที่สอง

ตอนนี้เราจะโหลดข้อมูลนี้อย่างไร?

ขั้นแรก เรามานำเข้าไลบรารีที่จำเป็นกันก่อน:

import pandas as pd
import numpy as np

Pandas จะอนุญาตให้เราดาวน์โหลดไฟล์ .csv เพื่อการประมวลผลต่อไป

จำเป็นต้องใช้ Numpy เพื่อแสดงตารางข้อมูลของเราเป็นเมทริกซ์พร้อมตัวเลข
ไปข้างหน้า. ลองใช้ไฟล์ train.csv แล้วอัปโหลดให้เรา:

dataset = pd.read_csv('train.csv')

เราจะอ้างอิงถึงการเลือกข้อมูล train.csv ของเราผ่านตัวแปรชุดข้อมูล มาดูกันว่ามีอะไรบ้าง:

dataset.head()

ก้าวแรกของคุณใน Data Science ไททานิค

ฟังก์ชัน head() ช่วยให้เราสามารถดูแถวแรกของ dataframe ได้

คอลัมน์ Survived คือผลลัพธ์ของเราอย่างชัดเจน ซึ่งทราบใน dataframe นี้ สำหรับคำถามเกี่ยวกับงาน เราต้องทำนายคอลัมน์ Survived สำหรับข้อมูล test.csv ข้อมูลนี้จัดเก็บข้อมูลเกี่ยวกับผู้โดยสารคนอื่น ๆ ของ Titanic ซึ่งเราแก้ไขปัญหาโดยไม่ทราบผลลัพธ์

เรามาแบ่งตารางของเราออกเป็นข้อมูลที่ขึ้นต่อกันและเป็นอิสระกัน ทุกอย่างเรียบง่ายที่นี่ ข้อมูลที่ขึ้นต่อกันคือข้อมูลที่ขึ้นอยู่กับข้อมูลอิสระที่อยู่ในผลลัพธ์ ข้อมูลที่เป็นอิสระคือข้อมูลที่มีอิทธิพลต่อผลลัพธ์

ตัวอย่างเช่น เรามีชุดข้อมูลต่อไปนี้:

“ Vova สอนวิทยาการคอมพิวเตอร์ - ไม่
Vova ได้รับ 2 คะแนนในด้านวิทยาการคอมพิวเตอร์”

เกรดในสาขาวิทยาการคอมพิวเตอร์ขึ้นอยู่กับคำตอบของคำถาม: Vova เรียนวิทยาการคอมพิวเตอร์หรือไม่? ชัดเจนไหม? เดินหน้าต่อไปเราใกล้ถึงเป้าหมายแล้ว!

ตัวแปรดั้งเดิมสำหรับข้อมูลอิสระคือ X สำหรับข้อมูลอิสระ y

เราทำสิ่งต่อไปนี้:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

มันคืออะไร? ด้วยฟังก์ชัน iloc[:, 2: ] เราบอก Python: ฉันต้องการดูตัวแปร X ข้อมูลที่เริ่มต้นจากคอลัมน์ที่สอง (รวมและโดยมีเงื่อนไขว่าการนับเริ่มจากศูนย์) ในบรรทัดที่สอง เราบอกว่าเราต้องการดูข้อมูลในคอลัมน์แรก

[ a:b, c:d ] คือการสร้างสิ่งที่เราใช้ในวงเล็บ หากคุณไม่ระบุตัวแปรใดๆ ตัวแปรเหล่านั้นจะถูกบันทึกเป็นค่าเริ่มต้น นั่นคือเราสามารถระบุ [:,: d] จากนั้นเราจะได้คอลัมน์ทั้งหมดใน dataframe ยกเว้นคอลัมน์ที่เริ่มจากหมายเลข d เป็นต้นไป ตัวแปร a และ b กำหนดสตริง แต่เราต้องการทั้งหมด ดังนั้นเราจึงปล่อยให้สิ่งนี้เป็นค่าเริ่มต้น

มาดูกันว่าเราได้อะไรบ้าง:

X.head()

ก้าวแรกของคุณใน Data Science ไททานิค

y.head()

ก้าวแรกของคุณใน Data Science ไททานิค

เพื่อทำให้บทเรียนเล็กๆ นี้ง่ายขึ้น เราจะลบคอลัมน์ที่ต้องได้รับการดูแลเป็นพิเศษหรือไม่ส่งผลกระทบต่อการเอาตัวรอดเลย มีข้อมูลประเภท str

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

สุด ๆ ! เรามาดูขั้นตอนต่อไปกันดีกว่า

ขั้นตอนที่สาม

ที่นี่เราจำเป็นต้องเข้ารหัสข้อมูลของเราเพื่อให้เครื่องเข้าใจได้ดีขึ้นว่าข้อมูลนี้ส่งผลต่อผลลัพธ์อย่างไร แต่เราจะไม่เข้ารหัสทุกอย่าง แต่จะเข้ารหัสเฉพาะข้อมูล str ที่เราทิ้งไว้เท่านั้น คอลัมน์ "เพศ" เราต้องการรหัสอย่างไร? เรามาแสดงข้อมูลเกี่ยวกับเพศของบุคคลเป็นเวกเตอร์: 10 - ชาย, 01 - หญิง

ก่อนอื่น มาแปลงตารางของเราให้เป็นเมทริกซ์ NumPy:

X = np.array(X)
y = np.array(y)

และตอนนี้เรามาดูกัน:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

ห้องสมุด sklearn เป็นห้องสมุดที่ยอดเยี่ยมที่ช่วยให้เราสามารถทำงานด้าน Data Science ได้อย่างสมบูรณ์ ประกอบด้วยโมเดล Machine Learning ที่น่าสนใจจำนวนมาก และยังช่วยให้เราสามารถเตรียมข้อมูลได้อีกด้วย

OneHotEncoder จะอนุญาตให้เราเข้ารหัสเพศของบุคคลในการเป็นตัวแทนนั้น ตามที่เราอธิบายไว้ จะสร้าง 2 คลาส: ชาย, หญิง หากบุคคลนั้นเป็นผู้ชาย 1 จะถูกเขียนในคอลัมน์ "ชาย" และ 0 ในคอลัมน์ "หญิง" ตามลำดับ

หลังจาก OneHotEncoder() จะมี [1] - หมายความว่าเราต้องการเข้ารหัสคอลัมน์หมายเลข 1 (นับจากศูนย์)

สุด ๆ ก้าวไปอีกขั้น!

ตามกฎแล้วสิ่งนี้จะเกิดขึ้นโดยที่ข้อมูลบางส่วนเว้นว่างไว้ (นั่นคือ NaN - ไม่ใช่ตัวเลข) ตัวอย่างเช่น มีข้อมูลเกี่ยวกับบุคคล: ชื่อของเขา เพศ แต่ไม่มีข้อมูลเกี่ยวกับอายุของเขา ในกรณีนี้ เราจะใช้วิธีการต่อไปนี้: เราจะหาค่าเฉลี่ยเลขคณิตเหนือคอลัมน์ทั้งหมด และหากข้อมูลบางส่วนหายไปในคอลัมน์ เราก็จะเติมช่องว่างด้วยค่าเฉลี่ยเลขคณิต

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

ตอนนี้เรามาดูกันว่าสถานการณ์เกิดขึ้นเมื่อข้อมูลมีขนาดใหญ่มาก ข้อมูลบางส่วนอยู่ในช่วงเวลา [0:1] ในขณะที่ข้อมูลบางส่วนอาจมีค่าเกินร้อยนับพัน เพื่อกำจัดการกระจายดังกล่าวและทำให้คอมพิวเตอร์แม่นยำยิ่งขึ้นในการคำนวณ เราจะสแกนข้อมูลและปรับขนาด ให้ตัวเลขทั้งหมดไม่เกินสาม เมื่อต้องการทำเช่นนี้ เราจะใช้ฟังก์ชัน StandardScaler

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

ตอนนี้ข้อมูลของเรามีลักษณะดังนี้:

ก้าวแรกของคุณใน Data Science ไททานิค

ระดับ. เราใกล้บรรลุเป้าหมายแล้ว!

ขั้นตอนที่สี่

มาฝึกโมเดลรุ่นแรกกันเถอะ! จากห้องสมุด sklearn เราพบสิ่งที่น่าสนใจมากมาย ฉันใช้โมเดล Gradient Boosting Classifier กับปัญหานี้ เราใช้ลักษณนามเพราะงานของเราคืองานการจัดหมวดหมู่ การพยากรณ์โรคควรกำหนดให้เป็น 1 (รอด) หรือ 0 (ไม่รอด)

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

ฟังก์ชัน fit จะบอก Python ว่าให้โมเดลค้นหาการขึ้นต่อกันระหว่าง X และ y

ไม่ถึงวินาที โมเดลก็พร้อม

ก้าวแรกของคุณใน Data Science ไททานิค

วิธีการสมัคร? เราจะได้เห็นกันตอนนี้!

ขั้นตอนที่ห้า บทสรุป

ตอนนี้เราจำเป็นต้องโหลดตารางที่มีข้อมูลการทดสอบของเราซึ่งเราจำเป็นต้องทำการคาดการณ์ ด้วยตารางนี้ เราจะดำเนินการแบบเดียวกับที่เราทำกับ X

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

ลองใช้โมเดลของเราตอนนี้เลย!

gbc_predict = gbc.predict(X_test)

ทั้งหมด. เราทำการคาดการณ์ ตอนนี้จะต้องบันทึกเป็น CSV และส่งไปที่เว็บไซต์

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

พร้อม. เราได้รับไฟล์ที่มีคำทำนายสำหรับผู้โดยสารแต่ละคน สิ่งที่เหลืออยู่คือการอัปโหลดโซลูชันเหล่านี้ไปยังเว็บไซต์และรับการประเมินการคาดการณ์ วิธีแก้ปัญหาแบบดั้งเดิมดังกล่าวไม่เพียงแต่ให้คำตอบที่ถูกต้องต่อสาธารณะเพียง 74% เท่านั้น แต่ยังเป็นแรงผลักดันใน Data Science อีกด้วย ผู้ที่อยากรู้อยากเห็นมากที่สุดสามารถเขียนถึงฉันในข้อความส่วนตัวได้ตลอดเวลาและถามคำถาม ขอบคุณทุกคน!

ที่มา: will.com

เพิ่มความคิดเห็น